使用armadillo库编译c ++时的错误信息

时间:2014-12-13 14:34:57

标签: c++ armadillo

犰狳图书馆的初学者,有两个问题。 第一个问题是关于犰狳和c ++的联系。我按照包中的说明安装了犰狳,位置为/usr/include/,我可以成功运行代码:

#include <iostream>
#include "/usr/include/armadillo"

using namespace std;

int main()
{
    arma::mat a = arma::randu<arma::mat>(3, 3);
    cout << a << endl;    
    return 0;
}

但是如果我想定义一个函数,例如矩阵的逆函数(我可以从库中调用一个函数,但我只是想做一个测试)。

#include <iostream>
#include "/usr/include/armadillo"

using namespace std;

arma::mat Inverse( arma::mat A){
    return arma::inv(A);
}

int main()
{
    arma::mat a = arma::randu<arma::mat>(3, 3);
    arma::mat inv_a = Inverse(a);
    cout << inv_a << endl;

    return 0;
}

然后程序失败并显示三条错误消息。

Undefined symbols for architecture x86_64:
  "_wrapper_dgetrf_", referenced from:
      void arma::lapack::getrf<double>(int*, int*, double*, int*, int*, int*) in main.o
  "_wrapper_dgetri_", referenced from:
      void arma::lapack::getri<double>(int*, double*, int*, int*, double*, int*, int*) in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我通过谷歌检查并尝试了一些建议,例如:" In miscellaneous MAC OS X linkers, I had to put "-01 -larmadillo" AND I had to deactivate the shared library settings!",说实话,我找不到miscellaneous选项和deactivate the shared library settings因为我不熟悉Xcode。然后我跟着install MacPorts并将库安装到文件夹/usr/local/include/,我再次尝试,第一个程序没问题,但第二个程序仍有三个错误,有人可以帮我吗?

第二个问题是当我在同一个程序中使用armadillo时使用lapack,因为我知道armadillo基于lapack,然后如果我声明了库armadillo,我是否需要声明{{ 1}}。为什么我问这个问题是当我宣布lapacke.hRcppArmadillo时,存在错误:

lapacke.h

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,但最终我解决了。 我没有出于自己的目的安装armadillo,但提供了包含目录和库目录的绝对路径。另外,在自述文件中有一条注释,即如果您使用的是Mac,则应使用“ -framework Accelerate”之类的Accelerate框架。因此,完成此操作后,所有链接器错误均消失了。