Моя конкретная установка - это кросс-компиляция OSX (IDE Eclipse) в Beaglebone Black. Однако эти инструкции должны работать для аналогичных настроек.
Необязательный:
Для компиляции я использовал Mac OS X ARM GNU Linux G++ Lite 2013.11-33 Набор инструментов. В частности, расширенный двоичный файл ARM GNU/Linux G++ Lite 2013.11-33.
1. Скачать:
Как и написал Мэтт, кросс-компилятор GCC не поддерживает Fortran, поэтому, если вы хотите скомпилировать LAPACK и BLAS, используйте модифицированную версию, найденную здесь. Я использую clapack-3.2.1-CMAKE.tgz
2. Создайте файл cmake для кросс-компиляции:
Вы можете использовать конструктор цепочек инструментов или просто написать его. Я написал один.
Пример:
# http://www.cmake.org/Wiki/CMake_Cross_Compiling#The_toolchain_file
# REQUIRED
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_SYSTEM_PROCESSOR arm)
# Added for the beaglebone
SET(FLOAT_ABI_SUFFIX "")
# specify the cross compiler
SET(CMAKE_C_COMPILER /usr/local/arm-2013.11/bin/arm-none-linux-gnueabi-gcc)
SET(CMAKE_CXX_COMPILER /usr/local/arm-2013.11/bin/arm-none-linux-gnueabi-c++)
# where is the target environment
SET(CMAKE_FIND_ROOT_PATH /usr/local/arm-2013.11)
# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
Примечание. Это мой первый опыт создания файла cmake. Не гарантируется правильность.
Вы захотите заменить /usr/local/arm-2013.11/bin/arm-none-linux-gnueabi-gcc на путь к выбранному вами компилятору, а также /usr/local/arm-2013.11/bin/arm- нет-linux-gnueabi-С++ и /usr/local/arm-2013.11
Я решил сохранить этот файл cmake как beaglebone.cmake.
3. Скомпилируйте:
Извлеките clapack-3.2.1-CMAKE.tgz и компакт-диск
скомпилировать: cmake -DCMAKE_TOOLCHAIN_FILE=~/Dropbox/workspaces/beaglebone/beaglebone.cmake
где ~/Dropbox/workspaces/beaglebone/beaglebone.cmake — это путь к вашему файлу cmake.
делать
По какой-то причине я получаю:
ds-mac-pro:clapack-3.2.1-CMAKE bunny$ make
Scanning dependencies of target arithchk
[ 0%] Building C object F2CLIBS/libf2c/CMakeFiles/arithchk.dir/arithchk.c.o
Linking C executable arithchk
[ 0%] Built target arithchk
[ 0%] Generating arith.h
/bin/sh: arithchk: command not found
make[2]: *** [F2CLIBS/libf2c/arith.h] Error 127
make[1]: *** [F2CLIBS/libf2c/CMakeFiles/f2c.dir/all] Error 2
make: *** [all] Error 2
Как ни странно, запуск make снова компилируется нормально:
ds-mac-pro:clapack-3.2.1-CMAKE bunny$ make
[ 0%] Built target arithchk
Scanning dependencies of target f2c
[ 0%] Building C object F2CLIBS/libf2c/CMakeFiles/f2c.dir/f77vers.c.o
[ 0%] Building C object F2CLIBS/libf2c/CMakeFiles/f2c.dir/i77vers.c.o
[ 0%] Building C object F2CLIBS/libf2c/CMakeFiles/f2c.dir/main.c.o
[ 0%] Building C object F2CLIBS/libf2c/CMakeFiles/f2c.dir/s_rnge.c.o
...
[100%] Building C object TESTING/EIG/CMakeFiles/xeigtstz.dir/xerbla.c.o
[100%] Building C object TESTING/EIG/CMakeFiles/xeigtstz.dir/xlaenv.c.o
[100%] Building C object TESTING/EIG/CMakeFiles/xeigtstz.dir/chkxer.c.o
[100%] Building C object TESTING/EIG/CMakeFiles/xeigtstz.dir/__/__/INSTALL/dsecnd.c.o
Linking C executable xeigtstz
[100%] Built target xeigtstz
4. Скопируйте (установите):
find . | grep \.a$
возвращается
./BLAS/SRC/libblas.a
./F2CLIBS/libf2c/libf2c.a
./SRC/liblapack.a
./TESTING/MATGEN/libtmglib.a
скопируйте libblas.a libf2c.a и libblapack.a в папку вашей любимой библиотеки. Я сделал /usr/local/armadillo-4.300.3/lib
Необходимый:
1. Копия включает:
Armadillo не нужно компилировать. Я не запускал какие-либо тесты для проверки, но похоже, что использование LAPACK и BLAS прекрасно работает с нескомпилированной копией Armadillo с использованием #define в коде. Примеры кода позже.
экстракт броненосец-4.300.3.tar.gz
(необязательно) cp armadillo-4.300.3/include/ /usr/local/armadillo-4.300.3/include
и, конечно же, замените /usr/local/armadillo-4.300.3/include на выбранный вами путь
2. Настройте GCC для использования Armadillo:
Я использую Eclipse с надстройкой поддержки кросс-компилятора C/C++ (меню «Справка» -> «Установить новое программное обеспечение...»), но инструкции легко преобразовать в cli или другие IDE.
В окне свойств проекта: C/C++ Build -> Settings
Компилятор Cross G++ -> Включает -> Включает пути (-I)
Нажмите +, чтобы добавить включение. Мой путь включения: /usr/local/armadillo-4.300.3/include
3. НЕОБЯЗАТЕЛЬНО — настройте GCC для использования скомпилированных библиотек:
Cross G++ Linker -> Библиотеки ->
Библиотеки (-l)
lapack
f2c
blas
Путь поиска библиотеки (-L)
Нажмите +, чтобы добавить путь. Мой путь: /usr/local/armadillo-4.300.3/lib
3. Пример кода:
В файле cpp попробуйте:
#include <armadillo>
using namespace arma;
mat A = randu<mat>(4,5);
mat B = randu<mat>(4,5);
std::cout << A*B.t() << std::endl;
Успех! :D
Некоторые функции Armadillo не поддерживаются напрямую и будут работать только с скомпилированными библиотеками. Вы можете проверить, что библиотеки скомпилированы и работают правильно, запустив простой тест, например:
#define ARMA_DONT_USE_WRAPPER
#define ARMA_USE_LAPACK
#define ARMA_USE_BLAS
#include <armadillo>
using namespace arma;
mat A = randu<mat>(5,5);
double x = det(A);
std::cout << x << std::endl;
person
Danielle
schedule
12.06.2014