Броненосец + БЛАС + ЛАПАК:Ошибка привязки?
Вопрос
Когда я пытаюсь скомпилировать файл example1.cpp, который поставляется с Armadillo 2.4.2, я постоянно получаю следующую ошибку компоновки:
/tmp/ccbnLbA0.o: In function `double arma::blas::dot<double>(unsigned int, double const*, double const*)':
main.cpp:(.text._ZN4arma4blas3dotIdEET_jPKS2_S4_[double arma::blas::dot<double>(unsigned int, double const*, double const*)]+0x3b): undefined reference to `wrapper_ddot_'
/tmp/ccbnLbA0.o: In function `void arma::blas::gemv<double>(char const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)':
main.cpp:(.text._ZN4arma4blas4gemvIdEEvPKcPKiS5_PKT_S8_S5_S8_S5_S8_PS6_S5_[void arma::blas::gemv<double>(char const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)]+0x68): undefined reference to `wrapper_dgemv_'
/tmp/ccbnLbA0.o: In function `void arma::blas::gemm<double>(char const*, char const*, int const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)':
main.cpp:(.text._ZN4arma4blas4gemmIdEEvPKcS3_PKiS5_S5_PKT_S8_S5_S8_S5_S8_PS6_S5_[void arma::blas::gemm<double>(char const*, char const*, int const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)]+0x7a): undefined reference to `wrapper_dgemm_'
collect2: ld returned 1 exit status
Может ли кто-нибудь помочь?я вручную установил
- последняя версия БЛАС
- лапак-3.4.0
- повышение-1.48.0
- последняя версия АТЛАС
Я использую Ubuntu 11.04 на модели MacBook Pro 7,1.
Решение
Большое спасибо, чтобы ОСГХ!Прочитав его комментарий, я занял второй взгляд на файл readme!Оказывается, мне не хватало '-O1 -larmadillo' в команду!
Вот команда, которую я использовал для его работы:
g++ example1.cpp -o example1 -O1 -larmadillo
.
Глупучая ошибка, я знаю .... просто напоминает вам, насколько важно читать readme.
readme также упоминает:
Если вы получите ссылки на ошибки, или если Armadillo был установлен вручную и вы указали, что Lapack и BLAS доступны, вы будете надо явную связь с лапаком и BLAS (или их эквиваленты), Например:
g++ example1.cpp -o example1 -O1 -llapack -lblas
.
Мне не нужно было включить '-llapack -lblas', но, возможно, это поможет кому-то еще, у кого есть похожие проблемы.
Другие советы
Есть странность, которую я только что обнаружил, сравнивая ранее работающие компиляции кода с самой проблемой этой темы, подчеркивая участие GNU CC (я не эксперт в этом): на моем компиляции машины успех зависит от заказапараметров к GCC / G ++ где G ++ Infile-Outfile -libarmadillo ... Работал, но G ++ -Libarmadillo Infile-Outfile ... не с (почти) ту же ошибка, как упомянуто выше. (Надеюсь, что помогает).
По состоянию на 5.0.0 (может также относиться к более ранним версиям)
Вам действительно нужно -larmadillo
, на Федора 21 -llapack
и -lopenblas
больше не являются явно необходимыми.