Armadillo + BLAS + LAPACK: ошибка связи? - PullRequest
5 голосов
/ 24 января 2012

Когда я пытаюсь скомпилировать 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

Может кто-нибудь помочь?Я вручную установил

  • последнюю версию BLAS
  • lapack-3.4.0
  • boost-1.48.0
  • последняя версия ATLAS

Я использую Ubuntu 11.04 на модели MacBook Pro 7,1

Ответы [ 3 ]

15 голосов
/ 25 января 2012

Большое спасибо osgx! Прочитав его комментарий, я еще раз взглянул на файл README! Оказывается, я пропустил '-O1 -larmadillo' в команде!

Вот команда, которую я использовал, чтобы она заработала:

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

Глупая ошибка, я знаю .... Это просто напоминает вам, как важно читать README.

README также упоминает:

Если вы получили ошибки компоновки, или если Armadillo был установлен вручную и вы указали, что LAPACK и BLAS доступны, вы будете необходимо явно связать с LAPACK и BLAS (или их эквивалентами), например:

g++ example1.cpp -o example1 -O1 -llapack -lblas

Мне не нужно было включать '-llapack -lblas', но, возможно, это поможет всем, кто сталкивается с подобными проблемами.

1 голос
/ 23 апреля 2017

Есть странность, которую я только что обнаружил, сравнивая ранее работающие компиляции кода с самой проблемой этого потока, подчеркивая причастность gnu cc (я не эксперт в этом): от моей машины успех компиляции зависит от порядкапараметров в gcc / g ++, где g ++ infile -o outfile -libarmadillo ... работал, но g ++ -libarmadillo infile -o outfile ... не с (почти) такой же ошибкой, как упомянуто выше.(надеюсь, это поможет).

0 голосов
/ 01 февраля 2016

По состоянию на 5.0.0 (может также относиться к более ранним версиям)

На самом деле вам нужно -larmadillo, на Fedora 21 -llapack и -lopenblas больше не являются необходимыми.

...