2012-01-23 71 views
4

當我嘗試編譯自帶的犰狳2.4.2 example1.cpp,我不斷收到以下錯誤鏈接:Armadillo + BLAS + LAPACK:鏈接錯誤?

/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
  • 升壓1.48.0
  • 最新版本ATLAS

我使用Ubuntu 11.04上MacBook Pro 7,1型號

+1

看起來你的Armadillo配置不正確,或者編譯字符串中沒有提到需要的庫。你可以顯示,你如何編譯example1.cpp – osgx

回答

14

非常感謝osgx!閱讀他的評論後,我再看看README文件!原來我在命令中錯過了'-O1 -larmadillo'!

下面是我用得到它的工作命令:

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

愚蠢的錯誤,我知道....它只是提醒你它是多麼的重要閱讀README。

自述也提到:

如果你得到鏈接錯誤,或者如果犰狳手動 安裝,您指定的LAPACK和BLAS,則您將 需要明確與LAPACK和BLAS(或他們的鏈接當量), 例如:

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

我沒有包括「-llapack -lblas」但也許這將幫助其他人誰是有類似的問題。

+0

這正是我一直在尋找的!只能鏈接LAPACK和BLAS。我也因爲沒有閱讀自述文件而感到內疚,所以不要感覺不好。我正在交叉編譯並獲取對我的LAPACK和BLAS的未定義引用:''cgemv_','sdot_',...等等... – Matt

0

作爲5.0.0(也可能適用於早期版本)

你確實需要-larmadillo,在的Fedora 21-llapack-lopenblas不是excplicitly必要了。

0

通過比較以前編譯的代碼與這個線程的問題,發現了一個奇怪的現象,強調gnu cc的參與(我不是這方面的專家):在我的機器編譯成功取決於參數的順序到gcc/g ++,其中 g ++ infile -o outfile -libarmadillo ...有效,但是 g ++ -libarmadillo infile -o outfile ...沒有(幾乎)與上面提到的相同的錯誤。 (希望有幫助)。

相關問題