【问题标题】:g++ compiling not recognizing '*' for matrix multiplication using armadillo libraryg ++编译不识别'*'使用犰狳库进行矩阵乘法
【发布时间】:2016-07-15 15:46:16
【问题描述】:

我在编译以下 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 查看 >invocation)

当我将矩阵乘法 '*' 替换为 '+'、'%' 等时,代码编译成功。

提前致谢!

【问题讨论】:

  • 看起来* 运算符的定义在源文件中,而您没有将库链接到其中?
  • 糟糕,我不知道库中的链接。但是,现在我遇到了以下错误:dyld:未加载库:/usr/local/opt/gcc/lib/gcc/6/libgfortran.3.dylib 引用自:/usr/local/opt/arpack/libexec /lib/libarpack.2.dylib 原因:找不到图像 Trace/BPT 陷阱:5
  • 看来我需要更多的挖掘;这是我第一次使用外部库,我对 Xcode 不熟悉。我正在做的项目是将 C++ 链接到一些 R 代码中以完成机器学习任务。
  • @ToddYoung - 为什么不只使用RcppArmadillo,这一切都由您负责?

标签: c++ g++ armadillo


【解决方案1】:

该错误是一个简单的链接器错误,您可以通过正确构建来克服它。您需要的确切内容将取决于您的系统/操作系统(并且都已记录在案),但在我的 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 库。其他操作系统可能有不同的使用模式。

【讨论】:

  • 感谢您的意见,德克。我是初学者,仍然有一些问题。我一直卡住,所以我决定使用自制软件卸载并重新安装。在 brew install 之后,我更改为目录“/usr/local/Cellar/armadillo/7.200.2”并尝试按照 readme.txt 中的指示运行 CMake。我现在遇到这个错误:目录似乎不包含 CMakeLists.txt。
  • @ToddYoung - 使用 Homebrew 安装 Armadillo 后,您无需使用 CMake 再次安装。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2022-01-01
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多