编译安装BLAS和LAPACK

之前在帮一位校友安装NumPy和SciPy的时候遇到不少问题。这两个Python包都依赖Fortran库BLAS和LAPACK. 这位校友在实验室机器上的用户没有sudo权限,所以无法通过系统的包管理器来安装依赖库,只好逐个编译安装。经过苦苦寻觅,终于在Stack Overflow找到了编译安装的方法。现把安装过程在CentOS 6.4上重现一遍。

先在用户主目录下面创建src目录,然后切换到src目录下操作。

mkdir ~/src
cd ~/src

安装BLAS

1、准备源码

wget http://www.netlib.org/blas/blas.tgz
tar zxf blas.tgz
cd BLAS-3.5.0/

2、编译

如果是32位系统,使用GNU的g77或gfortran编译器来编译:

g77 -O2 -fno-second-underscore -c *.f
gfortran -O2 -std=legacy -fno-second-underscore -c *.f

如果是64位系统,使用GNU的g77或gfortran编译器来编译:

g77 -O3 -m64 -fno-second-underscore -fPIC -c *.f
gfortran -O3 -std=legacy -m64 -fno-second-underscore -fPIC -c *.f

如果使用的是Intel的Fortran编译器,则:

ifort -FI -w90 -w95 -cm -O3 -unroll -c *.f

注意:

  • 请根据情况选择上述5个命令中的一个执行
  • 在编译BLAS、LAPACK、NumPy和SciPy的时候,所选择的Fortran编译器必须要保持一致
  • 在下述LAPACK的编译安装中,需要使用Fortran 90编译器,因此不应该使用g77来编译BLAS

3、后续工作

ar r libfblas.a *.o
ranlib libfblas.a
rm -rf *.o      # 清理文件
export BLAS=~/src/BLAS-3.5.0/libfblas.a # 导出BLAS环境变量

安装LAPACK

1、准备源码

wget http://www.netlib.org/lapack/lapack.tgz
tar zxf lapack.tgz
cd lapack-3.6.0/

2、编译

cp INSTALL/make.inc.gfortran make.inc   # On Linux with lapack-3.2.1 or newer
make lapacklib

注意:在执行make lapacklib之前,编辑make.inc文件,给OPTSNOOPT这两个设置都加上-fPIC选项。如果是64位系统,还需要加上-m64选项。修改后,看起来像这样:

FORTRAN  = gfortran 
OPTS     = -O2 -frecursive -fPIC -m64
DRVOPTS  = $(OPTS)
NOOPT    = -O0 -frecursive -fPIC -m64
LOADER   = gfortran

3、后续工作

make clean      # 清理文件
export LAPACK=~/src/lapack-3.6.0/   # 导出LAPACK环境变量

参考资料

推荐阅读更多精彩内容