[英]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.