Неопределенная ссылка на оболочку LAPACK от Armadillo

У меня есть вопрос по поводу использования броненосца.

Я использую Ubuntu 12.10 и компилятор gcc в Code :: Blocks.
Я установил LAPACK и BLAS с помощью менеджера пакетов synaptic. Я также установил Armadillo один раз, используя менеджер пакетов synaptic, один раз вручную с CMake. CMake обнаружил библиотеки LAPACK и BLAS при создании конфигураций для компиляции броненосца. Кроме того, я связал библиотеки BLAS и LAPACK в Code :: Blocks в «Build Options» -> «Linker».

Однако всякий раз, когда я хочу построить свой проект, я получаю сообщение об ошибке:

 In function `void arma::lapack::getrf<double>(int*, int*, double*, int*, int*, int*)':|
/usr/include/armadillo_bits/lapack_wrapper.hpp|41|undefined reference to `wrapper_dgetrf_'|

Это, очевидно, означает, что броненосец не может найти LAPACK, но что я сделал не так?

Я также раскомментировал соответствующие строки в файле armadillo_bits / config.hpp, чтобы он выглядел так:

    #if !defined(ARMA_USE_LAPACK)
//#define ARMA_USE_LAPACK
//// Uncomment the above line if you have LAPACK or a high-speed replacement for LAPACK,
//// such as Intel MKL, AMD ACML, or the Accelerate framework.
//// LAPACK is required for matrix decompositions (eg. SVD) and matrix inverse.
#endif

#if !defined(ARMA_USE_BLAS)
//#define ARMA_USE_BLAS
//// Uncomment the above line if you have BLAS or a high-speed replacement for BLAS,
//// such as OpenBLAS, GotoBLAS, Intel MKL, AMD ACML, or the Accelerate framework.
//// BLAS is used for matrix multiplication.
//// Without BLAS, matrix multiplication will still work, but might be slower.
#endif

/* #undef ARMA_USE_WRAPPER */
//// Comment out the above line if you're getting linking errors when compiling your programs,
//// or if you prefer to directly link with LAPACK and/or BLAS.
//// You will then need to link your programs directly with -llapack -lblas instead of -larmadillo

Ошибка появляется первой, когда я пытаюсь установить матрицу с целыми числами, поэтому

  Mat<int> element_nodes;

Буду признателен за полезные ответы. Я искал в интернете пару часов. Кроме того, если вам нужно больше исходного кода, дайте мне знать.

4

Решение

Похоже, у вас установлено две копии Armadillo, которые имеют разные конфигурации. Если есть сомнения, свяжите ваши программы с:

g ++ prog.cpp -o prog -O2 -larmadillo -llapack -lblas

Вы также можете посмотреть на Часто задаваемые вопросы о броненосцах и предыдущий вопрос Stackoverflow.

0

Другие решения

Я полагаю, вы еще не прокомментировали строку определения !:

//#define ARMA_USE_LAPACK
^^
||

Вот

0

Если вы использовали файлы библиотеки blas и lapack из загруженного пакета armadillo, возможно, они не работают, потому что в файле ReadMe указано, что они принадлежат третьей стороне, поэтому я загрузил их из других источников, а затем скомпилировал нормально.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector