blas、lapack、atlas在Ubuntu上的安装

时间:2021-09-02 04:10:15

问题

今天在Ubuntu下安装caffe时,遇到下面错误:

AR -o .build_release/lib/libcaffe.a
LD -o .build_release/lib/libcaffe.so.1.0.0
/usr/bin/ld: /usr/local/lib/libcblas.a(cblas_sgemv.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libcblas.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [.build_release/lib/libcaffe.so.1.0.0] Error 1

解决方案:

安装过程中会使用到gfortran编译器,如果没有安装则使用sudo apt-get install gfortran进行安装。

blas的安装包地址为 :http://www.netlib.org/blas/blas.tgz
cblas的安装包地址为:http://www.netlib.org/blas/blast-forum/cblas.tgz
lapack的官方包地址: http://www.netlib.org/lapack/
atlas的官方包地址:http://sourceforge.net/projects/math-atlas/

1、blas的安装

下载文件后,对压缩包进行解压,进入目录,执行命令:

gfortran -c  -O3  -fPIC  *.f # 编译所有的 .f 文件,生成 .o文件 加上了-fPIC
gcc -shared *.o -fPIC -o libblas.so
cp libblas.so /usr/local/lib/
ar rv libblas.a *.o # 链接所有的 .o文件,生成 .a 文件
su cp libblas.a /usr/local/lib # 将库文件复制到系统库目录

2、cblas的安装

进入CBLAS文件夹,根据你自己的计算机平台,将目录下某个 Makefile.XXX 复制为 Makefile.in , XXX表示计算机的平台,如果是Linux,那么就将Makefile.LINUX 复制为 Makefile.in,然后使用下面的命令安装:

cp ../BLAS/libblas.a  testing  # 将上一步编译成功的 libblas.a 复制到 CBLAS目录下的testing子目录 
make # 编译所有的目录
sudo cp lib/cblas_LINUX.a /usr/local/lib/libcblas.a # 将库文件复制到系统库目录下

3、lapack的安装

编译 lapack以及lapacke,这一步比较麻烦,首先当然是进入lapack-3.4.2文件夹,然后根据平台的特点,将INSTALL目录下对应的make.inc.XXX 复制一份到 lapack-3.4.2目录下,并命名为make.inc, 这里我复制的是 INSTALL/make.inc.gfortran,因为我这里用的是gfortran编译器。
因为lapack以来于blas库,所以需要对lapack-3.4.2/Makefile做如下修改

#lib: lapacklib tmglib
lib: blaslib variants lapacklig tmglib

再执行

make # 编译所有的lapack文件 
cd lapacke # 进入lapacke 文件夹,这个文件夹包含lapack的C语言接口文件
make # 编译lapacke
cp include/*.h /usr/local/include #将lapacke的头文件复制到系统头文件目录
cd .. #返回到 lapack-3.4.2 目录
cp *.a /usr/local/lib # 将生成的所有库文件复制到系统库目录

4、altas的安装

执行命令:

sudo apt-get install libatlas-base-dev