编译以下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查看&gt;调用)
当我用'+','%'等替换矩阵乘法'*'时,代码编译无怨言。
提前致谢!
答案 0 :(得分:0)
错误是一个简单的链接器错误,您可以通过正确构建来克服该错误。你需要什么将取决于你的系统/操作系统(并且都记录在案),但在我的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库。其他操作系统可能有不同的使用模式。