最近想用VScode配置一个Fortran的编译环境,搜索了一遍网上似乎只有关于在VScode平台下配置Fortran的,没有配置在VsCode平台下用Fortran调用LAPACK库的帖子。事先声明:本人不熟悉VsCode。
1. VS Studio + Intel Fortran + LAPACK
本人原来用VS2019+Intel Fortran编译过LAPACK3.9.1的包生成过libblas.lib,liblapack.lib和liblapacke.lib三个静态库文件,并在VS2019平台下成功运行了调用LAPACK库的Fortran代码,关于VS Studio+ Intel Fortran + LAPACK的配置可以参照lapack官网中Easy Windows Build部分(Easy Windows Build)以及国内的这篇介绍VS +Intel Fortran + LAPACK,相关软件的安装可参照网上其他教程进行。 除了自己编译生成库文件外,还可以用lapack官网编译好的库文件,具体配置可参照这篇文章VS+Intel Fortran+Lapack官网编译好的库文件
2. VsCode + Gfortran + LAPACK
由于VS Studio过于臃肿,安装一个太占空间,功能远大于需求,所以便转向VsCode。VsCode体积小但并未集成一个完整的IDE环境,需要略微繁琐的配置,下面进入正文。
1)VsCode + Fortran的环境配置
VsCode + Fortran的配置可以参考这篇文章:Windows环境下VsCode+Fortran配置
补充:VsCode有user install和system install两个版本,区别在于只有system install版本在安装的时候可以右键管理员运行安装;
MinGw-w64直接下载8.1.0版本的x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z压缩包即可,如下图。online install.exe有时候会安装不上。这个版本的压缩包缺少libgcc_s_seh_64-1.dll和libgfortran_64-3.dll两个动态库文件。这两个库文件可自主网上搜寻,也可通过FileFinder软件下载,两个库文件下载libgcc&libgfortran和FileFinder下载FileFinder。 MingGw-w64下载地址:mingw-w64 8.1.0版本下载地址 ,MinGw-w64的文件夹可以放在系统盘外的其他盘,只需要将bin文件夹添加进系统变量。
2)LAPACK库配置
LAPACK库文件获取:可通过VS Studio编译生成最新版本的库文件,我推荐直接下载LAPACK官网编译好的库文件。官网下载地址:LAPACK3.7.0库文件下载,注意要下载的文件包括动态库文件3个(.dll)、静态库文件3个(.lib)和头文件4个(.h)三部分,如下图
在存放源码的目录下新建存放LAPACK库的文件夹,再在LAPACK库文件夹下分别新建Include文件夹存放4个头文件(.h)和Lib文件夹存放3个静态库文件(.lib)和4个动态库文件(.dll),如图
复制下载的三个动态库文件(libblas.dll、liblapack.dll、liblapacke.dll)和libgcc_s_seh_64-1.dll、libgfortran_64-3.dll总共五个动态库文件到MinGw-w64的bin文件夹下,如图
修改tasks.json文件,将下图中-L和-I后面的路径分别替换为自己下载存放的LAPACK库的库文件和头文件路径,即上文加粗的那两个文件夹的地址。
在VsCode中,按下ctrl + shift + P ,输入Reload Window,重启Vscode,环境配置完毕。
测试代码来自这篇博客VS +Intel Fortran + LAPACK
program test_sgesv
implicit none
real :: a(3,3),b(3)
character :: c
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
read (*,*) c
end program test_sgesv
结果
注意:
1.如果代码源文件较多的话,最好拷贝一份.vscode文件夹到代码源文件目录下,直接打开代码源文件所在目录运行程序,防止编译器找不到.mod文件。如下图
2.gfortran编译代码需提前分配变量的内存空间,否则会出现Segmentation Fault的错误。
3.按上述过程配置环境一定不要出现中文路径,配置后如果出现exit with code=2问题,一种可能就是源码中的变量没有分配好内存空间。