-larmadillo和-lopenblas -llapack之间的Armadillo编译差异

时间:2019-06-28 19:03:10

标签: c++ compilation armadillo

对于以下代码: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时,可以用这种方式进行编译。但是如果没有-larmadilloARMA_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;
}

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>