首先,可以在官网下载以下lib
下载64位的,然后就是添加文件所在的文件夹,以及添加lib,就可以直接使用lapack中的函数,但是现在Oneapi中集成了lapack库,所以可以直接调用,如下所示。
1. 首先,项目-属性-Fortran-General中Additional Include Directories
添加C:\Program Files (x86)\Intel\oneAPI\mkl\latest\include\intel64\lp64
2. 项目-属性-Fortran-Libraries中Use Intel Math Kernel Library选择
3. 项目-属性-Linker-General中Additional Libraries Directories中
添加C:\Program Files (x86)\Intel\oneAPI\mkl\2023.0.0\lib\intel64
4. 项目-属性-Linker-Input中Additional Denpendencies中
添加mkl_lapack95_lp64.lib
5. 在电脑属性-高级-环境变量-系统Path中添加
C:\Program Files (x86)\Intel\oneAPI\mkl\2023.0.0\redist\intel64
这样就大功告成了,下面的示例代码测试是否调用成功。
PROGRAM MatrixInverse
use lapack95
IMPLICIT NONE
INTEGER, PARAMETER :: N = 3
REAL(KIND=8) :: A(N,N), WORK(N*N)
INTEGER :: IPIV(N), INFO,i,j
! 初始化矩阵A的值
A = RESHAPE((/1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0/), SHAPE(A))
! 输出原始矩阵A
WRITE(*,*) '原始矩阵A:'
DO I = 1, N
WRITE(*, '(3F6.2)') (A(I,J), J = 1, N)
END DO
! 计算矩阵逆
CALL DGETRF(N, N, A, N, IPIV, INFO)
IF (INFO /= 0) THEN
WRITE(*,*) '矩阵逆计算失败!'
STOP
END IF
CALL DGETRI(N, A, N, IPIV, WORK, N*N, INFO)
IF (INFO /= 0) THEN
WRITE(*,*) '矩阵逆计算失败!'
STOP
END IF
! 输出逆矩阵A
WRITE(*,*) '逆矩阵A:'
DO I = 1, N
WRITE(*, '(3(F12.10,1x))') (A(I,J), J = 1, N)
END DO
END PROGRAM MatrixInverse
注意:第四步中写的lib名称只是这个代码中函数所需的,具体你代码中的函数需要哪个,看文档是在哪个lib中,不确定可以都写进去试试,如:
mkl_lapack95_lp64.lib mkl_intel_lp64.lib mkl_scalapack_lp64.lib
具体的文件夹路径:C:\Program Files (x86)\Intel\oneAPI\mkl\2023.0.0\redist\intel64