2012-04-16 3 views
2

Привет, я установил Armadillo3.0.1 в свой рабочий каталог /home/me/package/armadillo3.0.1/, как сказал README.txt. Но когда я пытаюсь пример:Установка Armadillo

g++ -I /home/me/package/armadillo3.0.1/usr/include/ example.cpp -o example -O1

Он всегда показывает ошибку:

/tmp/ccZAE9pj.o: In function void arma::gemm<false, false, false, false>::apply_blas_type<double>(arma::Mat<double>&, arma::Mat<double> const&, arma::Mat<double> const&, double, double)': example.cpp:(.text._ZN4arma4gemmILb0ELb0ELb0ELb0EE15apply_blas_typeIdEEvRNS_3MatIT_EERKS5_S8_S4_S4_[void arma::gemm<false, false, false, false>::apply_blas_type<double>(arma::Mat<double>&, arma::Mat<double> const&, arma::Mat<double> const&, double, double)]+0x75e): undefined reference to wrapper_dgemm_' /tmp/ccZAE9pj.o: In function void arma::glue_times_redirect2_helper<true>::apply<arma::Mat<double>, arma::Mat<double> >(arma::Mat<arma::Mat<double>::elem_type>&, arma::Glue<arma::Mat<double>, arma::Mat<double>, arma::glue_times> const&)': example.cpp:(.text._ZN4arma27glue_times_redirect2_helperILb1EE5applyINS_3MatIdEES4_EEvRNS3_INT_9elem_typeEEERKNS_4GlueIS5_T0_NS_10glue_timesEEE[void arma::glue_times_redirect2_helper<true>::apply<arma::Mat<double>, arma::Mat<double> >(arma::Mat<arma::Mat<double>::elem_type>&, arma::Glue<arma::Mat<double>, arma::Mat<double>, arma::glue_times> const&)]+0xe69): undefined reference to wrapper_dgemv_' example.cpp:(.text._ZN4arma27glue_times_redirect2_helperILb1EE5applyINS_3MatIdEES4_EEvRNS3_INT_9elem_typeEEERKNS_4GlueIS5_T0_NS_10glue_timesEEE[void arma::glue_times_redirect2_helper::apply, arma::Mat >(arma::Mat::elem_type>&, arma::Glue, arma::Mat, arma::glue_times> const&)]+0x1175): undefined reference to `wrapper_dgemv_' collect2: ld returned 1 exit status

Однако если добавить -larmadillo вариант, как:

g++ example.cpp -o example -O1 -larmadillo

Он работает по телефону старый версия. Если я хочу использовать новые возможности в 3.0.1, как Mat.t(), он также будет показывать ошибку:

example.cpp: In function ‘int main(int, char**)’: example.cpp:20: error: ‘struct arma::mat’ has no member named ‘t’

Это показывает, что при добавлении -larmadillo, он называет старую версию броненосца из/USR/включить/armadillo_bits /.

Любая идея? Благодарю.

ответ

1

В первой команде, вы не связываетесь с libarmadillo. Считаете ли вы использование опции gcc -L gcc для добавления каталога ссылок? Например:

g++ -I/home/me/package/armadillo3.0.1/usr/include/ -L/home/me/package/armadillo3.0.1/usr/lib example.cpp -o example -O1 -larmadillo

+0

Спасибо, похоже работа. Теперь он не распечатывает тайные ошибки, но только жалобы не могут найти libmkl.so. – zhh210

+0

Вам, вероятно, нужны похожие -L и -l для libmkl. – emsr

0

Я также столкнулся с этой проблемой. Я исправил его, удалив любые предыдущие версии Armadillo, так как они могут помешать новой версии.

Удаление может быть выполнено с помощью диспетчера пакетов. Вы также можете вручную удалить старую версию с помощью следующих команд (в окне терминала):

rm /usr/include/armadillo 
    rm -rf /usr/include/armadillo_bits 

Вам необходимо выполнить приведенную выше команду, как суперпользователь (корень). На Ubuntu должно быть достаточно, чтобы предисловие к ним было «sudo».

Возможно, вам также потребуется удалить старые файлы библиотеки, которые могут быть в/usr/lib/или/usr/lib64 /, или что-то в этом направлении.

Как только старая версия была удалена, вы можете повторно установить новый Armadillo через установку на основе cmake.

0

Я удалил старый и переустановил новый в каталоге по умолчанию. Это сработало! Таким образом, кажется, когда я установил старую версию с:

make install DESTDIR=my/own/dir/

это было установить неправильно.

Следовательно, для новичков, подобных мне, установка по умолчанию имеет больше смысла.

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