2015-05-27 2 views
2

Я хочу использовать Armadillo с Eclipse. Однако все инструкции по связыванию Armadillo приведены для Visual Studio. Теперь я выполнил инструкции, указанные в файле ReadMe файла Armadillo library. Я добавил папку Armadillo include в project(right click)->properties->C/C++ Build->Settings->Cross G++ Compiler->Includes->Inlcude paths(-I), а затем добавил папку с библиотеками (папка библиотеки содержит файлы lapack и blas .lib и .dll) в project(right click)->properties->C/C++ Build->Settings->Cross G++ Linker->Libraries->Library search path (-L).Как связать Armadillo с Eclipse

Однако при компиляции кода в Eclipse, я получаю ошибку

.....armadillo_bits/lapack_wrapper.hpp:37: undefined reference to `dgetrf_'.

Не должна ли она просто искать .lib файлы в папке библиотеки и включить их во время компиляции? Буду признателен за любую помощь в этом вопросе.

С уважением, ТМ

ответ

1

Связывание библиотеки Armadillo в проект Eclipse, может быть сделано, и вы собираетесь это сделать! Это почти то же самое, что и для любой другой библиотеки.

В свойствах проекта:

  • GCC C++ Compiler -> Включает в себя: добавить путь к файлу armadillo (где пространство имен arma декларируется) к пути поиска (опция -I). Пример: /home/alpha/soft/armadillo-4.400.1/include

  • GCC C++ Linker -> Библиотеки: добавить путь к файлу libarmadillo.so... в пути поиска библиотек (опция -L) Пример: /home/alpha/soft/armadillo-4.400.1. Добавить armadillo, lapack, blas и m в качестве библиотек (опция -l). m is for math.

Вот вызовы компилятора и линкера, как производится затмении:

make all 
Building file: ../src/armaeclip.cpp 
Invoking: GCC C++ Compiler 
g++ -I/home/alpha/soft/armadillo-4.100.1/include -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/armaeclip.d" -MT"src/armaeclip.d" -o "src/armaeclip.o" "../src/armaeclip.cpp" 
Finished building: ../src/armaeclip.cpp 



Building target: armaeclip 
Invoking: GCC C++ Linker 
g++ -L/home/alpha/soft/armadillo-4.100.1 -o "armaeclip" ./src/armaeclip.o -larmadillo -lblas -lm -llapack 
Finished building target: armaeclip 
**** Build Finished **** 

Как запустить код, вы можете получить что-то вроде:

error: det(): use of ATLAS or LAPACK needs to be enabled terminate called after throwing an instance of 'std::logic_error' what(): det(): use of ATLAS or LAPACK needs to be enabled Abandon (core dumped)

Чтобы избежать эту проблему, следуйте рекомендациям faq of Armadillo: uncomment #define ARMA_USE_LAPACK в файле /home/alpha/soft/armadillo-4.100.1/include/config.hpp и перестройте свой проект.

+0

Привет, Фрэнсис, спасибо за совет. Однако у меня нет файлов .so файлов lapack, blas, m или armadillo. Единственные файлы библиотеки, которые у меня есть, имеют форму lapack_WIN64_MT.lib и blas_WIN64_MT.lib. Когда я связываю папку Armadillo и добавляю lapack и blas в качестве библиотек, я получаю сообщение об ошибке «не могу найти lapack и blas». Поэтому я предполагаю, что мне не хватает файлов .so, но где я могу их найти? – hellfragger

+0

Не могли бы вы добавить 'lapack_WIN64_MT' и' blas_WIN64_MT' в качестве библиотек вместо 'lapack' и' blas'? Согласно [именованию конвенции MinGW] (http://www.mingw.org/wiki/specify_the_libraries_for_the_linker_to_use), это может решить вашу проблему. – francis

+0

Я пробовал, но он читает, не может найти lapack_WIN64_MT и не может найти blas_WIN64_MT. Я как бы отказался и использовал библиотеку алгебр собственных лайнеров – hellfragger

0

Вы также можете создать GNU Autotools проекты и добавьте следующие строки:

bin_PROGRAMS=armadillo_example 
armadillo_example_SOURCES=armadillo_example.cpp 
armadillo_example_LDADD=-larmadillo 

Makefile.am To файл, где ваш исходный код существует.

Смежные вопросы