一、获取lapack源代码
wget http://www.netlib.org/lapack/lapack-3.6.1.tgz
二、解压后编译
cd /mybk/lapack-3.6.1
cp make.inc.example make.inc
make后得到liblapack.a librefblas.a libtmglib.a
三、拷贝到系统库路径如/opt/local/lib
四、测试:
tetst.f
! gfortran -o test test.f -L/opt/local/lib -llapack -lrefblas
program main
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)
print *,'solve=',b
end program main
gfortran -o test test.f -L/opt/local/lib -llapack -lrefblas
$ ./test
a= 2.00000000 0.00000000 0.00000000 0.00000000 3.00000000 0.00000000 0.00000000 0.00000000 4.00000000
b= 998.000000 999.000000 1000.00000
solve= 499.000000 333.000000 250.000000
test2.s
! gfortran -o test2 test2.f -L/opt/local/lib -llapack -lrefblas
program Console1
external dgesv
integer n, lda, nrhs, ldb
parameter (n=2,lda=2,nrhs=1,ldb=2)
double precision A(lda,n)
double precision b(ldb,nrhs)
character byebye
integer ipiv(n), info, i, j
A(1,1)=1
A(1,2)=2
A(2,1)=3
A(2,2)=4
B(1,1)=5
B(2,1)=6
write(*,*) 'Hello World'
call dgesv(n,nrhs,A,lda,ipiv,b,ldb,info)
write(*,*) 'INFO =', info
write(*,*) ((A(i,j),i=1,lda),j=1,n)
write(*,*) ((B(i,j),i=1,ldb),j=1,nrhs)
write(*,*) "END OF PROGRAM..."
end program Console1
$ gfortran -o test2 test2.f -L/opt/local/lib -llapack -lrefblas $ ./test2 Hello World INFO = 0 3.0000000000000000 0.33333333333333331 4.0000000000000000 0.66666666666666674 -3.9999999999999987 4.4999999999999991