c++ - -larmadillo 和 -lopenblas -llapack 编译犰狳的区别
问题描述
对于下面的代码:test.cpp
当我编译它时
g++ -std=c++11 -I ~/armadillo-openblas/include/ -L ~/armadillo-openblas/lib/ test.cpp -o test -O2 -larmadillo
我收到一个错误:
./test:加载共享库时出错:libarmadillo.so.9:无法打开共享对象文件:没有这样的文件或目录
但我确信 libarmadillo.so.9 在 ~/armadillo-openblas/lib/ 下。
我也试过这个:
g++ -std=c++11 -I ~/armadillo-openblas/include/ -L ~/armadillo-openblas/lib/ test.cpp -o test -DARMA_DONT_USE_WRAPPER -lopenblas -llapack
有用。我知道添加时ARMA_DONT_USE_WRAPPER
,我们可以这样编译。但是-larmadillo
如果没有,这种方式怎么行不通ARMA_DONT_USE_WRAPPER
?
顺便说一句,是什么-O2
意思?
//test.cpp
#include <iostream>
#include <armadillo>
int main(){
arma::arma_rng::set_seed_random();
arma::Mat<double> A = arma::randu(4,4);
std::cout << A << std::endl;
return -1;
}
解决方案
-I ~/armadillo-openblas/include/ -L ~/armadillo-openblas/lib/
如果您卸下零件,第一种情况应该可以工作。仅使用-larmadillo
. Armadillo 可能是使用“香草”BLAS 和 Lapack 构建的,当您指定 openBlas 库时,它会被混淆。如果你想使用其他库,你必须使用-DARMA_DONT_USE_WRAPPER
并指定依赖项,就像你展示的那样。
该-O2
标志是编译器的优化级别,有许多级别,从无-O0
优化到-O3
其他一些,例如-Ofast
推荐阅读
- python-3.x - Azure-sdk-for-python AKS-如何在 AKS 上升级 kubernetes
- swift - AssetReader/AssetWriter - CMSampleBuffer 和 CALayer
- javascript - 从函数 node.js 访问变量数据
- regex - 正则表达式来分隔时间并用分隔符替换它
- c++ - 如果插入了正确的输入,则终止程序
- julia - 如何在 Windows 上的 Julia REPL 中清除屏幕
- python - 我可以在我的代码中添加什么以在输出中显示排序所做的所有动作?
- r - 从 VBA 运行 R 并查看后台发生的情况
- php - 更改 WooCommerce 购物车和结帐页面中的“运输”文本:[重复新]
- javascript - 蚂蚁设计风格