之前在帮一位校友安装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
文件,给OPTS
和NOOPT
这两个设置都加上-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环境变量