对于以下代码: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;
}
答案 0 :(得分:0)
如果您删除-I ~/armadillo-openblas/include/ -L ~/armadillo-openblas/lib/
部分,则第一种情况应该有效。仅使用-larmadillo
就足够了。 Armadillo可能是用“香草” BLAS和Lapack构建的,当您指定openBlas库时,它将感到困惑。如果要使用其他库,则必须使用-DARMA_DONT_USE_WRAPPER
并按照显示的那样指定依赖项。
-O2
标志是编译器的优化级别,从-O0
无优化到-O3
等许多级别,例如-Ofast
< / p>