犰狳+ BLAS + LAPACK:链接错误?

时间:2012-01-23 21:19:46

标签: linker lapack blas armadillo

当我尝试编译Armadillo 2.4.2附带的example1.cpp时,我不断收到以下链接错误:

/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的最新版本

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

3 个答案:

答案 0 :(得分:15)

非常感谢osgx!看完他的评论后,我再看了一下README文件!事实证明我在命令中缺少'-O1 -larmadillo'!

这是我用来使它工作的命令:

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

愚蠢的错误,我知道......它只是提醒你阅读自述文件的重要性。

自述文件还提到:

如果您遇到链接错误,或者手动安装了Armadillo 并且您指定LAPACK和BLAS可用,您将 需要明确链接LAPACK和BLAS(或它们的等价物), 例如:

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

我没有必要包含'-llapack -lblas',但也许这会帮助其他遇到类似问题的人。

答案 1 :(得分:1)

通过比较以前工作的代码编译与这个线程的问题,强调gnu cc的参与(我不是这方面的专家),我发现了一个奇怪的事情:在我的机器编译成功取决于顺序参数gcc / g ++在哪里 g ++ infile -o outfile -libarmadillo ...工作,但是 g ++ -libarmadillo infile -o outfile ...没有(几乎)与上面提到的相同的错误。 (希望有帮助)。

答案 2 :(得分:0)

截至 5.0.0 (也可能适用于早期版本)

你实际上需要-larmadillo Fedora 21 -llapack并且-lopenblas不再是必需的。