如何将犰狳库修复为 C++

Posted

技术标签:

【中文标题】如何将犰狳库修复为 C++【英文标题】:How to fix the armadillo library to c++ 【发布时间】:2015-07-02 05:20:55 【问题描述】:

我正在使用 macbook 在这里和那里编写一些代码。最近我想和犰狳库一起用 C++ 做一些事情。但是在安装和一切之后它似乎不起作用。

例如,我可以编写 arma::mat 变量等,但是当我在 TextMate 中运行此代码时:

vec q = randu<vec>(5); 
cout << normalise(q);

我得到这个错误输出:

"Undefined symbols for architecture x86_64:
  "_wrapper_dgesdd_", referenced from:
      void arma::lapack::gesdd<double>(char*, int*, int*, double*, int*, double*, double*, int*, double*, int*, double*, int*, int*, int*) in test-56d704.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
rm: /var/folders/sh/vr2n15ln47j0k33yh1j0_tyw0000gn/T/test.cpp.Sfz5vezN: No such file or directory

奇怪的是,如果我不使用 normalize 或 norm 函数,它编译得很好。

我将库包含为#include '/usr/local/include/armadillo'

编辑: 如果您从他们的网页下载犰狳,我已经安装了犰狳包,既尝试使用“brew install armadillo”,也尝试使用 README.txt 中提到的步骤。

编辑2: 在 textmate 中,我向 TM_CXX_FLAGS 中的变量添加了一个标志: -I /usr/local/include -DARMA_DONT_USE_WRAPPER -lblas -llapack .. 这似乎解决了通过 textmate 编译时的问题。但是我不明白如何解决它代码

编辑3: 编译时发现这是警告...

clang:警告:-lblas:“链接器”输入未使用 叮当声:警告:-llapack:“链接器”输入未使用 叮当声:警告:-llapack:“链接器”输入未使用 叮当声:警告:-lblas:“链接器”输入未使用

有人知道如何在 Xcode 中为编译器正确添加标志吗?

【问题讨论】:

1) 你检查过路径/usr/local/include/armadillo吗?可能你需要#include "/usr/include/armadillo"? 2) 你确定不需要#include "/usr/local/include/lapacke.h"? (或类似路径) 你忘记链接-larmadillo了吗?例如:g++ code.cpp -o code -O2 -larmadillo 当我使用 g++ 的东西时,我收到以下错误:ld: library not found for -larmadillo clang: error: linker command failed with exit code 1 (use -v to see invocation) and when i尝试使用“/usr/local/include/lapacke.h”它说找不到文件 【参考方案1】:

当我开始使用犰狳编程时,我首先遇到了同样的问题。对于 g++,我只需添加 -larmadillo 作为命令行选项。比如这个

g++ -O2 -o armadillo_example armadillo_example.cpp -larmadillo

【讨论】:

以上是关于如何将犰狳库修复为 C++的主要内容,如果未能解决你的问题,请参考以下文章

如何将犰狳矩阵转换为立方体?

了解 Makefile。 make 无法链接犰狳库

如何在编译期间强制犰狳库链接到本地​​ OpenBLAS

在 C++ 中返回多个矩阵(犰狳库)

C++ 中矩阵的动态名称(犰狳库)

如何从 C++(带有犰狳)代码链接到 PETSc?