Linux环境下Lapack软件包的编译和使用
自行下载编译过程
1. 从 netlab 下载最新版本的源代码
2. 将源代码解压缩
3. 编辑 make.inc 文件,进行一些系统相关的编译参数设置
一些编译参数,
2. 将源代码解压缩
3. 编辑 make.inc 文件,进行一些系统相关的编译参数设置
一些编译参数,
PLAT 表示使用的平台,会接在生成lib库的名字中,原本是 _LINUX。
FORTRAN 表示你使用的fortran编译器,根据自己安装的编译器来设置,我用的是 gfortran。
OPTS 表示 编译时的优化程度,设置为 -O2即可。
LOADER 设置成和FORTRAN 基本一样就可以了。
FORTRAN 表示你使用的fortran编译器,根据自己安装的编译器来设置,我用的是 gfortran。
OPTS 表示 编译时的优化程度,设置为 -O2即可。
LOADER 设置成和FORTRAN 基本一样就可以了。
确定生成目标如下,
BLASLIB = wwwblogs/libblas$(PLAT).a
LAPACKLIB = liblapack$(PLAT).a
LAPACKLIB = liblapack$(PLAT).a
TMGLIB = libtmglib$(PLAT).a
EIGSRCLIB = libeigsrc$(PLAT).a
LINSRCLIB = liblinsrc$(PLAT).a
EIGSRCLIB = libeigsrc$(PLAT).a
LINSRCLIB = liblinsrc$(PLAT).a
原来的这些库文件的名字前面没有lib的,这里加上。因为linux上库文件一般有前缀lib的,在链接的时候 -l后面带的是库的名字,那个时候是不加lib的。如果已经编译生成了这些库,可以重命名,而不用重新编译。
PLAT : 设置生成的库函数的后缀,比如 SUN, LINUX之类的,当然也可以不设置;
FORTRAN : 设置编译器,比如 g77, gfortran, ifort, g95 等等;(我设置为FORTRAN = ifort -g)
OPT:设置编译选项,根据具体的编译器和优化要求进行设置;
LOADER : 设置成和FORTRAN 一样就可以了;
4. 编辑 Makefile
到 lib: 选项。然后设置需要编译的库函数如下
#lib: lapacklib tmglib
lib: blaslib lapacklib tmglib
PLAT : 设置生成的库函数的后缀,比如 SUN, LINUX之类的,当然也可以不设置;
FORTRAN : 设置编译器,比如 g77, gfortran, ifort, g95 等等;(我设置为FORTRAN = ifort -g)
OPT:设置编译选项,根据具体的编译器和优化要求进行设置;
LOADER : 设置成和FORTRAN 一样就可以了;
4. 编辑 Makefile
到 lib: 选项。然后设置需要编译的库函数如下
#lib: lapacklib tmglib
lib: blaslib lapacklib tmglib
默认的情况是不编译 blas 库的。(除非事先编译好了blas库,否则应一起编译。)
5. 编译和测试 Lapack.
在源代码的根目录下输入 make 回车。然后 make 程序就会自动进行编译和测试。
6. Lapack 函数的使用
如果编译和测试顺利的话会在源代码的根目录下生成三个文件 lapack_LINUX.a、blas_LINUX.a、tmglib_LINUX.a,其中lapack_LINUX.a 和 blas_LINUX.a 就是我们所需要的库函数。它们的使用有多种途径:
方法1:
5. 编译和测试 Lapack.
在源代码的根目录下输入 make 回车。然后 make 程序就会自动进行编译和测试。
6. Lapack 函数的使用
如果编译和测试顺利的话会在源代码的根目录下生成三个文件 lapack_LINUX.a、blas_LINUX.a、tmglib_LINUX.a,其中lapack_LINUX.a 和 blas_LINUX.a 就是我们所需要的库函数。它们的使用有多种途径:
方法1:
将lapack_LINUX.a 和blas_LINUX.a所在路径加入到LD_LIBRARY_PATH环境变量
在命令行输入 echo $LD_LIBRARY_PATH,结果为/usr/lib/alliance/lib:/usr/lib/alliance/lib;
输入LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/fengwei.igg/lapack-3.2.1
输入 export LD_LIBRARY_PATH
进入代码所在目录,输入 ifort test.f90 lapack_LINUX.a blas_LINUX.a
编译生成a.out文件,命令行执行./a.out,输出结果。
方法2:
首先,必须将lapack_LINUX.a 和blas_LINUX.a库文件重命名为liblapack_LINUX.a 和libblas_LINUX.a
如以上两文件在/home/fengwei.igg/lapack-3.2.1 文件夹下,在命令行输入
ifort test.f90 -L/home/fengwei.igg/lapack-3.2.1 -llapack_LINUX -lblas_LINUX
编译生成a.out文件,命令行执行./a.out,输出结果。
方法3:
把lapack_LINUX.a 和blas_LINUX.a拷贝至代码所在目录,
输入 ifort test.f90 lapack_LINUX.a blas_LINUX.a
编译生成a.out文件,命令行执行./a.out,输出结果。
方法3:
把lapack_LINUX.a 和blas_LINUX.a拷贝至代码所在目录,
输入 ifort test.f90 lapack_LINUX.a blas_LINUX.a
编译生成a.out文件,命令行执行./a.out,输出结果。
使用intel商业mkl库调用lapack
如果安装了intel公司的mkl数据库,则里面包含了lapack库,简单的使用方法为在命令行输入:
ifort test.f90 -L/opt/intel/mkl/10.2.2.025/lib/32 -lmkl_lapack95 -lguide -lmkl_core -lmkl_intel -lmkl_intel_thread -lpthread
如出现如下类似错误:
error while loading shared libraries: libguide.so: cannot open shared object file: No such file or directory
解决方法为将/opt/intel/mkl/10.2.2.025/lib/32添加到LD_LIBRARY_PATH,如方法1.
编译生成a.out文件,命令行执行./a.out,输出结果。
ifort test.f90 -L/opt/intel/mkl/10.2.2.025/lib/32 -lmkl_lapack95 -lguide -lmkl_core -lmkl_intel -lmkl_intel_thread -lpthread
如出现如下类似错误:
error while loading shared libraries: libguide.so: cannot open shared object file: No such file or directory
解决方法为将/opt/intel/mkl/10.2.2.025/lib/32添加到LD_LIBRARY_PATH,如方法1.
编译生成a.out文件,命令行执行./a.out,输出结果。
实例
test.f90源文件:
program test_sgesv
implicit none
real :: a(3,3),b(3)
program test_sgesv
implicit none
real :: a(3,3),b(3)
integer :: v(3),iflag
external sgesv
a=reshape([2.0,0.0,0.0,0.0,3.0,0.0,0.0,0.0,4.0],[3,3])
b=[998.0,999.0,1000.0]
print *,'a=',a
print *,'b=',b
call sgesv(3,1,a,3,v,b,3,iflag)
c语言编译器怎么安装print *,'solve=',b
end program test_sgesv
输出结果:
a= 2.000000 0.0000000E+00 0.0000000E+00 0.0000000E+00 3.000000
0.0000000E+00 0.0000000E+00 0.0000000E+00 4.000000
b= 998.0000 999.0000 1000.000
solve= 499.0000 333.0000 250.0000
external sgesv
a=reshape([2.0,0.0,0.0,0.0,3.0,0.0,0.0,0.0,4.0],[3,3])
b=[998.0,999.0,1000.0]
print *,'a=',a
print *,'b=',b
call sgesv(3,1,a,3,v,b,3,iflag)
c语言编译器怎么安装print *,'solve=',b
end program test_sgesv
输出结果:
a= 2.000000 0.0000000E+00 0.0000000E+00 0.0000000E+00 3.000000
0.0000000E+00 0.0000000E+00 0.0000000E+00 4.000000
b= 998.0000 999.0000 1000.000
solve= 499.0000 333.0000 250.0000
LAPACKE的安装
从网站上下载lapacke的压缩包,就是Standard C language APIs for LAPACK对应的压缩包,解压缩,查看README文件。
同样地,需要修改make.inc文件,
CC 表示使用的C程序编译器,改成 gcc,
LINKER 表示编译时要使用的连接器,前面几行注释提到了,
LINKER 表示编译时要使用的连接器,前面几行注释提到了,
之前编译lapack.a 和blas.a用的什么fortran编译器,这里就用什么。那么改成 gfortran.
LAPACKE 表示要生成的库文件的名字,类似的,改成liblapacke.a
LAPACKE的编译需要之前生成的lapack库文件,所以LIBS这一行需要设置好。
LIBS = $(LAPACK_PATH)/liblapack.a $(LAPACK_PATH)/libblas.a
LAPACKE 表示要生成的库文件的名字,类似的,改成liblapacke.a
LAPACKE的编译需要之前生成的lapack库文件,所以LIBS这一行需要设置好。
LIBS = $(LAPACK_PATH)/liblapack.a $(LAPACK_PATH)/libblas.a
注意这里liblapack.a文件全名应该是liblapack$(PATH).a,PATH对应LAPACK文件make.inc的PATH
其中LAPACK_PATH就是liblapack.a所在的目录了。
查看以下Makefile,没什么需要修改的,可以直接make,或者是make lapacke, 不让它编译test的内容。然后就生成liblapacke.a了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论