繁体   English   中英

g ++使用armadillo库编译不识别'*'进行矩阵乘法

[英]g++ compiling not recognizing '*' for matrix multiplication using armadillo library

编译以下C ++代码时遇到错误:

# include <iostream>
# include <armadillo>

using namespace arma;
using namespace std;

int main() {
mat A;
mat B;
mat C;

// Populating the matrices with random numbers
A.randu(3,3);
B.randu(3,3);

// Matrix multiplication
C = A * B;

cout << "Mutliplying matrices A and B:" << endl;
cout << "A * B = " << C << endl;

return 0;

}

使用g ++编译时出现错误:

架构x86_64的未定义符号:“_ wrapper_dgemm_”,引自:

  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*) in >armadillo_playground-aa3649.o 

“_wrapper_dgemv_”,引自:

  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*) in armadillo_playground-aa3649.o 

ld:找不到架构x86_64 clang的符号:错误:链接器命令失败,退出代码为1(使用-v查看>调用)

当我用'+','%'等替换矩阵乘法'*'时,代码编译无怨言。

提前致谢!

错误是一个简单的链接器错误,您可以通过正确构建来克服该错误。 您需要的具体取决于您的系统/操作系统(并且都记录在案),但在我的Linux机箱上,这有效:

edd@max:/tmp$ g++ -o arma arma.cpp -larmadillo 
edd@max:/tmp$ ./arma 
Mutliplying matrices A and B:
A * B =    1.0574   1.0356   1.5178
   1.1368   1.3434   1.4919
   0.7028   0.6516   1.0423

edd@max:/tmp$ 

这里arma.cpp是包含你的例子的文件。 仅与libarmadillo.so库链接就足够了,因为它链接到LAPACK和BLAS库。 其他OS可能具有不同的使用模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM