犰狳图书馆的初学者,有两个问题。
第一个问题是关于犰狳和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.h
和RcppArmadillo
时,存在错误:
lapacke.h
答案 0 :(得分:0)
我遇到了同样的问题,但最终我解决了。 我没有出于自己的目的安装armadillo,但提供了包含目录和库目录的绝对路径。另外,在自述文件中有一条注释,即如果您使用的是Mac,则应使用“ -framework Accelerate”之类的Accelerate框架。因此,完成此操作后,所有链接器错误均消失了。