ubuntu 安装 armadillo

作者: , 共 2131 字 , 共阅读 0

armadillo是一个线性代数 C++库,封装了blaslapack,提供更直观的接口。

1、安装依赖项

sudo apt-get install cmake libopenblas-dev liblapack-dev libarpack2-dev libsuperlu-dev -y

2、下载

wget http://sourceforge.net/projects/arma/files/armadillo-12.8.2.tar.xz

最新的版本可以在 http://arma.sourceforge.net/download.html 找到。

3、安装

tar -Jxvf armadillo-12.8.2.tar.xz
cd armadillo-12.8.2
cmake .  -DCMAKE_INSTALL_PREFIX=/opt
make
make install

4、测试

cd example1
g++ -o example1 example1.cpp -O2 -larmadillo
./example1

5、链接错误

测试程序出现下面的编译错误:

/tmp/ccstw4HV.o: In function `double arma::auxlib::det_lapack<double>(arma::Mat<double> const&, bool)':
example1.cpp:(.text._ZN4arma6auxlib10det_lapackIdEET_RKNS_3MatIS2_EEb[_ZN4arma6auxlib10det_lapackIdEET_RKNS_3MatIS2_EEb]+0xba): undefined reference to `wrapper_dgetrf_'
/tmp/ccstw4HV.o: In function `std::ostream& arma::operator<< <double, arma::Op<arma::Mat<double>, arma::op_inv> >(std::ostream&, arma::Base<double, arma::Op<arma::Mat<double>, arma::op_inv> > const&)':
example1.cpp:(.text._ZN4armalsIdNS_2OpINS_3MatIdEENS_6op_invEEEEERSoS6_RKNS_4BaseIT_T0_EE[_ZN4armalsIdNS_2OpINS_3MatIdEENS_6op_invEEEEERSoS6_RKNS_4BaseIT_T0_EE]+0x166): undefined reference to `wrapper_dgetrf_'
example1.cpp:(.text._ZN4armalsIdNS_2OpINS_3MatIdEENS_6op_invEEEEERSoS6_RKNS_4BaseIT_T0_EE[_ZN4armalsIdNS_2OpINS_3MatIdEENS_6op_invEEEEERSoS6_RKNS_4BaseIT_T0_EE]+0x25e): undefined reference to `wrapper_dgetri_'
example1.cpp:(.text._ZN4armalsIdNS_2OpINS_3MatIdEENS_6op_invEEEEERSoS6_RKNS_4BaseIT_T0_EE[_ZN4armalsIdNS_2OpINS_3MatIdEENS_6op_invEEEEERSoS6_RKNS_4BaseIT_T0_EE]+0x404): undefined reference to `wrapper_dgetri_'
collect2: error: ld returned 1 exit status

没找到具体原因。但把/usr/lib/usr/include下面的 armadillo 删掉可以解决,这可能是因为系统内存在老版本导致的:

sodu rm /usr/lib/libarmadillo*
rm /usr/include/armadillo* -r

删除后运行程序会出现运行时链接错误:

./example1: error while loading shared libraries: libarmadillo.so.7: cannot open shared object file: No such file or directory

这是因为/usr/local/lib没有加到LD_LIBRARY_PATH。我们也可以手工把 local 下面的 so 复制到/usr/lib下:

sodu cp /usr/local/lib/libarmadillo* /usr/lib/

Q. E. D.

类似文章:
相似度: 0.116
boost是除std外最常用的 C++库,覆盖很多常用操作。目前最新的版本是1.85.0http://boost.org/上可以查看最新版本号,将下面的 59 换成最新的即可)。
相似度: 0.092
编程 » C++, GCC, 编译链接
C++的链接分为两部分,一个是编译时,一个是运行时。但运行时的行为也收到编译参数的影响。
相似度: 0.087
IT » talib, 技术分析
下面的安装地址可在https://github.com/mrjbq7/ta-lib#troubleshooting上找最新的:
IT » apt, pip, python, ubuntu
正常而言,大家都是用 pip 来安装 python 的包。但有时候无意中(通常是为安装某个特定的软件,根据软件的安装提示),会使用 apt 安装 python 包。而且其实很多包都可以通过 apt 来安装的,名字就是包名再加python3-的前缀。安装后的库以及依赖项位于/usr/lib/python3/dist-packages目录下。比如 apt 安装 requests 包:
编程 » C++, log
先编译 libfmt.a :
IT » Python, Ubuntu
主要是update-alternatives命令的使用。
IT » Linux, grep
最简单的方式是使用grep-L参数,查找当前目录下不包含指定字符串的文件:
IT » Linux, cheatsheets
cheat 提供命令行的速记记录,在命令行下,随时增加笔记随时查看,用的时间越长越强大!
编程 » C++, 编译
一个典型的 GCC C++编译过程为:
编程 » Linux, Vim, 字符编码
由于 UNICODE 的优势,目前推荐都用 UTF-8 进行编码。
出现的一个场景是将函数指针用 void