很多人对Fortran的第一印象是“老古董”,但真进了科研圈、工科圈,才发现这玩意儿不仅没死,反而活得好好的。天气预报、流体力学、有限元分析、分子动力学模拟,这些计算量巨大的领域,核心代码几乎全是Fortran写的。原因很简单:Fortran天生就是为数值计算而生的,数组运算快得离谱,几十年的积累沉淀下来的数值计算库更是其他语言难以替代的。于是问题就来了——很多人第一台电脑、第一次装环境,面对的就是“Fortran的下载安装”这座大山。
尤其是刚进课题组的研究生,导师甩过来一个老程序,README里写着“requires Intel Fortran”,或者师兄说“你先装个Simply Fortran把XX例子跑通”,这时候你就得二选一,甚至三选一。再加上Intel Visual Fortran 2013这种年代的安装包还在四处流传,各种版本、各种依赖、各种环境变量,稍有不慎就装到怀疑人生。这篇文章我就把Fortran编译器的下载安装这件事彻底讲透:几条主流路线怎么选、每一条具体怎么装、装完怎么验证、踩坑怎么排查。面向的就是刚接触Fortran、正在为环境发愁的人,当然,折腾过几轮但还是没搞定的人,也能在这里找到答案。
1. Fortran编译器选型:三条路线怎么选
先说一个容易被忽略的基本事实:Fortran本身是语言标准,就像C语言一样,你写的是Fortran代码,但真正把代码变成可执行文件的是编译器。所以“下载安装Fortran”这个说法,本质上是在问“下载安装哪款Fortran编译器”。选错编译器,轻则多装几遍白费劲,重则代码编译不过、和现有工程不兼容,甚至影响后续依赖库的调用。选型这事,值得先花几分钟想清楚。
目前主流的路子有三条:Intel Visual Fortran(简称IVF,现在叫Intel Fortran Compiler,但在国内老用户嘴里还是IVF)、Simply Fortran、以及开源的GFortran。这三条线对应三类完全不同的人群,需求取向也不一样。
Intel Visual Fortran是商业编译器,过去是Intel Visual Fortran Composer XE,和Visual Studio绑定使用,编译优化效果极强,很多高校和企业用的老代码都是基于IVF写的。缺点是安装流程繁琐,依赖VS环境,许可证管理也复杂,对新手很不友好。Simply Fortran则走的是“打包一体”路线,自带编辑器、自带编译器,安装完就能用,几乎零配置,特别适合刚入门或者只想跑通一个特定项目的人。GFortran则是自由软件界的主力,是GCC编译器家族里的Fortran编译器,免费开源、跨平台,用起来也不难,但在Windows上需要搭配MinGW-w64来用,命令行方式操作,体验偏程序员风格。
这三条路线之间不是谁绝对好谁绝对差,而是适用场景不同。我给你的建议是:如果你只是学生作业、个人学习、或者刚好拿到一个GFortran能编译的项目,那就从GFortran或者Simply Fortran入门,别一上来就折腾IVF;如果你进入的课题组、公司项目明确要求Intel编译器,那再投入时间装IVF,因为有些老项目的构建脚本只认ifort,换编译器很可能连依赖库都对不上。
为了让你看得更直观,我把三条路线的关键差异列成一张表:
| 路线 | 安装难度 | 适用系统 | 编译器命令 | 谁适合用 |
|---|---|---|---|---|
| Intel Visual Fortran (IVF) | 较高,依赖VS | Windows为主(新版跨Linux/macOS) | ifort | 高校、科研院所、老工程维护 |
| Simply Fortran | 极低,一键式 | Windows(另有Linux版) | gfortran(内置) | 新手入门、快速验证程序 |
| GFortran + MinGW | 中等 | Windows/Linux/macOS | gfortran | 喜欢命令行、跨平台需求 |
选型的另一个关键点是看你的代码长什么样。如果你拿到的源码文件后缀是.f90,用的是自由格式(free form),那三种编译器基本都能编译。但如果代码是老掉牙的.f后缀、固定格式(fixed form),甚至里面还带有一些Intel扩展语法,比如!DEC$指令,那就只能上IVF了。所以拿到代码之后先别急着装环境,先看一眼源码特征,能帮你少走很多弯路。
2. Intel Visual Fortran 2013安装:经典但费劲的老牌路线
2.1 安装前的准备:避坑的第一道防线
Intel Visual Fortran 2013在很多人心中就是“教科书里的编译器”,因为大量的科研代码和高校教程都基于它。但这个版本确实是古董级了,它的完整名称是Intel Visual Fortran Composer XE 2013,集成在Intel Parallel Studio XE 2013套件里。安装它之前,你首先要认清它的一个硬性绑定:它依赖于Visual Studio外壳,需要VS提供IDE集成环境和C/C++编译器基础设施。
具体来说,IVF 2013官方支持的VS版本是Visual Studio 2012和Visual Studio 2010,部分人实测在VS2013上也能凑合,但我不建议冒险。你需要找一个VS 2012或者更稳妥的方案:先装VS2012,再装IVF2013。很多人在这一步就栽了,图省事直接装VS2015或者VS2017,结果IVF装到一半提示找不到VS组件,或者装完了IDE里根本没有Fortran的工程模板。
还有一点必须强调:IVF2013是32位和64位都有的,但在64位Windows上,你得确保你的VS安装了对应的64位C++编译组件。如果你在装VS的时候精简安装,只勾了C#而没勾VC++,IVF即使装上也无法正常产生64位目标代码。检查方法很简单:打开VS,新建一个C++项目试试能不能编译,能通过再说IVF的事。
另外就是许可证。IVF系列过去是商业软件,2013版本常用的还有序列号。如果你所在单位买了正版或者有授权文件,那直接输入序列号即可。如果是自学的,很多安装包里内置了注册文件,具体我就不展开了,但你要了解一件事:Intel后来在2017年之后对编译器做了免费化调整,新版Intel oneAPI工具包直接免费,所以如果你不是非要老版本,其实可以考虑直接用新版,省去许可证的麻烦。
2.2 完整安装步骤:从零理清流程
假设你已经下载好了IVF 2013安装包(一个ISO镜像或解压后的目录),我的建议流程是这样的:
第一步,装Visual Studio 2012。这一步没什么可多说的,正常下一步到底,但记得两个关键选项:勾选Visual C++组件,安装路径不要带中文。VS编译器和Fortran编译器后续有交互,如果路径里有中文,经常在编译阶段报莫名其妙的找不到文件的错误。
第二步,解压IVF2013安装包,找到setup.exe或者Install时,右键选择“以管理员身份运行”。这一步很重要,我见过不少人双击安装,结果到中间某个阶段写入系统环境变量失败,整个安装回滚。管理员权限在编译器安装里属于基本操作。
第三步,在安装界面里选择自定义安装,语言选英语即可,组件上保持默认,但要确认自动勾选了“Intel Visual Fortran 2013”和“Integration with Microsoft Visual Studio”这两类组件。很多人装完说“VS里没有Fortran菜单”,十有八九就是漏了后者。
第四步,输入许可证信息。如果你有serial,就选“Use serial number”,填进去;如果你只有license文件,就选“Use license file”,浏览到你的.lic文件。安装程序一般会在这一阶段校验许可,不通过的话后面无法继续。
第五步,等待安装完成,默认情况下安装程序会自动配置环境变量,比如PATH里加入Intel编译器目录,系统变量里会创建IFORT_COMPILER之类的变量。这几个变量不要手贱去改,后面编译全靠它们。
第六步,重启电脑,或者至少重新打开VS。然后新建项目,左侧模板里选择Intel Visual Fortran,右侧选择Console Application,确认能成功创建项目。这里就能看出VS版本兼容性了:如果你的VS根本不显示Intel Visual Fortran这个模板,要么是集成组件没装,要么是VS版本太新,IVF2013根本无法识别。
2.3 环境变量常见问题与应对
这里插一个非常常见的坑:很多人装完IVF之后,直接打开CMD运行ifort,结果提示“不是内部或外部命令”。这不一定代表安装失败,而是你的终端会话没有刷新环境变量。关掉CMD重新打开一次,通常就好了。如果重开还不行,那就手动检查一下环境变量里有没有类似“C:\Program Files (x86)\Intel\Composer XE 2013\bin\intel64”这个路径。没有的话,你就得找到编译器实际安装路径,手动追加到PATH里。
不过说句实在话,在Windows上用IVF,我并不建议你直接开CMD敲ifort命令行。因为IFort的命令行参数又杂又多,新手很难判断出错原因。更好的方式是借助VS这个IDE平台,在项目工程里写好源代码,点击生成解决方案,让VS自动调用ifort。这样报错信息会直接定位到源代码行号,排查效率高很多。
还有一个细节容易被忽略:IVF2013自带的编译器版本较老,对现代处理器指令集的支持也不完全。如果你在较新的CPU上跑代码,可能会遇到“Illegal instruction”这样的运行时报错。这属于编译器优化参数问题,不一定是代码问题。真遇到了,把项目属性里的优化级别调低,或者禁用高级指令集再试。
3. Simply Fortran安装:新手友好的一体化方案
3.1 为什么推荐Simply Fortran
Simply Fortran是Approximatrix公司做的商业软件,但它提供免费试用版,而且试用版的限制只是一些高级功能,日常使用绰绰有余。官方说法是“an easy-to-use Fortran development environment for Windows”,翻译过来就是“给Fortran新手准备的傻瓜式IDE”。最关键的一点,它内部捆绑了GFortran编译器,安装之后不需要再单独配置MinGW或任何环境变量,开箱即用。这体验比IVF那一套不知道高到哪里去了。
当然,有人会质疑Simply Fortran编译性能不如Intel编译器。这个质疑在大型工程里成立,因为Intel编译器的优化确实猛,生成的二进制在数值密集计算里可能快20%到30%。但对于学生作业、课程设计、中小型模拟程序,GFortran的性能差距感知并不明显。而且有多种证据表明GFortran的代码正确性意识和标准兼容性都在稳步提升,比如它对新标准Fortran 2008和2018的支持已经很完整了。
所以我的判断是:如果你的项目没有硬性要求必须用Intel编译器,Simply Fortran是一个极佳的起点。等你后续需要处理数万行代码、需要MKL数学核心库、需要并行计算支持时,再迁移到Intel oneAPI工具包也不迟。
3.2 安装与第一个工程实操
如果你下载的是Simply Fortran 3(这是目前主流的最新大版本),安装过程基本就是“下一步到底”。但要注意一个细节:安装向导会让你选择是否将. f90文件关联到Simply Fortran,我建议勾上,这样以后双击任何源代码文件都会直接打开IDE,省事。
安装完之后打开Simply Fortran,界面是典型的IDE布局,顶部菜单、左侧项目树、中间代码区、底部编译输出窗口。新建工程的方法是:
点击File菜单,选择New Project,向导会弹出四种工程类型:Console Application(控制台程序)、Windowed Application(带图形界面的程序)、Library(静态库)、Quick Application(快速生成示例)。新手选Console Application就对了。
然后填上项目名称,注意项目名称最好不要用中文,一是兼容性问题,二是个别老代码对中文路径敏感。选好保存路径,IDE就会自动生成一个示例程序框架,默认就是一句print *, "Hello"。
这时候你可以直接点菜单栏上的运行按钮(一个绿色三角),它会先编译再运行,弹出一个黑色控制台窗口输出内容。看到这一步,你的Fortran环境就算真正打通了。整个过程不超过五分钟,跟IVF比起来简直是天壤之别。
我特别喜欢Simply Fortran的一点是它的编译输出窗口会直接列出编译参数的完整命令。如果你后续想自己控制gfortran编译,可以参考它生成的命令行来学习。这个设计对新手来说是极好的教学素材——不是让命令行暗箱操作,而是透明展示。
3.3 版本更新与兼容性问题
装Simply Fortran的时候,还有个小原则:优先下载官网最新版。2024年之后Simply Fortran已经到了3.x版本,内置的GFortran版本对应GCC 12或更高,对Fortran 2018特性的支持比较完善。网上还有一些流传的旧版Simply Fortran 1.x、2.x安装包,下载下来内置的GFortran是4.8或者6.3那种远古版本,某些新语法(比如do concurrent、associate结构)就会编译不过。这种问题排查起来特别恼人,因为你以为是代码有错,实际上是编译器太老,标准支持跟不上。
还有一点,Simply Fortran目前的免费试用模式是不限时间的,每次打开可能弹一个提醒窗口,但不会强制收费。如果你后面用顺了,花几百块钱买个正版也说得过去,毕竟这个工具确实给Windows上的Fortran开发省了无数麻烦。
4. 在Windows上配置免费的GFortran环境
4.1 GFortran的优势与正式安装路径
如果你本质上并不需要一个图形IDE,或者你只想拥有一个跨平台可迁移的编译器,那GFortran是最佳选择。GFortran是GNU项目的一部分,和C语言的GCC、C++的G++出自同一家族。它的设计目标很纯粹:一个独立的、符合标准的Fortran编译器,免费、开源、支持全平台。在Linux和macOS上,通过系统包管理器一条命令就能安装,但在Windows上稍微绕一点,基本是通过MinGW-w64项目获得。
有朋友可能会问:网上是不是有个单独的GFortran Windows安装包?准确地说,GFortran本身并不提供官方Windows安装包,而是由MinGW-w64项目组将GFortran和其他GCC组件打包发布。所以你在Windows上装GFortran,本质上就是装MinGW-w64,然后从里面找到gfortran.exe(一般在bin目录里)。
最新的MinGW-w64安装方式有两种。一种是下载MinGW-w64编译器套件自动化安装程序,在选择架构时选x86_64,选线程模型时选posix或者win32都行,但如果你后面要装Python包或者调用并行库,建议选posix,兼容性更好。另一种方式是使用MSYS2环境,在MSYS2终端里执行pacman -S mingw-w64-x86_64-gcc-fortran,安装后不仅在MSYS2里能用,还可以把MSYS2的路径加到系统PATH里,在CMD里直接跑gfortran。
这里必须提示一个常见事故:MinGW-w64安装完成后,默认安装目录可能带“mingw-w64”这种不含空格的路径,但你如果自定义安装到“C:\Program Files...”,后面命令行引用时必须加引号,麻烦得很。我建议在安装时就把路径设置为C:\mingw64或者D:\mingw64这类顶层目录,后面操作会简单很多。
4.2 环境配置与命令行编译
安装完成后,你需要手动把MinGW-w64下的bin目录加入系统环境变量PATH。具体操作是:右键“此电脑”,选“属性”,点“高级系统设置”,在“环境变量”里找到Path,编辑,新增一行,填入你的MinGW安装路径下的bin文件夹,例如C:\mingw64\bin。保存后重启CMD,输入gfortran --version,如果能看到版本信息,说明环境配置成功。
接下来你就可以进入日常使用模式了。假设你有一个hello.f90文件,内容大概是这样:
program hello implicit none print *, "Hello, Fortran!" end program hello在CMD里进入该文件所在目录,运行:
gfortran hello.f90 -o hello.exe这条命令的意思是:用gfortran编译hello.f90,生成名为hello.exe的可执行文件。然后运行hello.exe,控制台会输出Hello, Fortran!。这就是命令行编译的标准流程,编译器的基础指令就是这么简单。
当你的项目由多个源文件组成时,命令会变复杂一些。假设你有main.f90和function.f90,你可以写成:
gfortran -c function.f90 gfortran -c main.f90 gfortran function.o main.o -o project.exe第一步-c分别编译出目标文件. o,最后一步链接成最终可执行文件。很多新手看到多条命令就慌了,其实这一步是把编译和链接拆开,方便你在代码改动后只重新编译修改过的文件。不过对于小型项目,一条命令直接搞定也没问题:
gfortran function.f90 main.f90 -o project.exe还有个实话说在前面:Windows上纯命令行的体验确实没有Linux来得顺滑。如果你日常就在Windows环境且没打算换系统,命令行方式需要你用CMD操作,不如IDE直观。所以GFortran通常留给有一定基础、或者需要把代码部署到Linux服务器上的人。你的开发环境如果和运行环境都是Linux,那Windows上的GFortran就只是用来做本地预编译和检查的。
4.3 不推荐在Windows上用的来源
说句得罪人的话,网上搜GFortran下载,经常搜到一些第三方聚合站,页面里大大的“Download GFortran”按钮,点下去可能会下到带捆绑软件或者版本陈旧的压缩包。尤其是某些“MinGW跨平台编译器网盘合集”,里面的版本可能停留在GCC 4.9时代,编出来的程序在Windows 10/11上还会有兼容性问题。这类来源不靠谱,宁可去MinGW-w64官方渠道或者MSYS2源,也不要贪图省事从不明网站下。
另外还有一个很常见的坑:在Windows上安装了多个Fortran编译器时,系统PATH中的顺序决定了运行哪一个gfortran或ifort。如果你装了Simply Fortran同时又装了MinGW-w64,你敲gfortran时到底用的是哪个版本,要看PATH里谁的bin目录排在前头。排查这类问题,直接在CMD里输入where gfortran,它会列出所有匹配的可执行文件路径,从上到下就是实际查找顺序,方便你确认自己调用的到底是谁。
5. 装完之后怎么验证:写一个靠谱的测试程序
5.1 经典Hello World的完整测试
环境装好了,总得验下一口气。很多教程让你跑一个Hello World就算成功,这在我看来远远不够。因为Hello World只验证了编译器最基本的输出能力,却没有验证格式化运算、数组、动态分配这些Fortran核心特性。你辛辛苦苦配完环境,结果连浮点输出都编译不过,那才叫崩溃。
我建议你新建一个文件test.f90,把下面的测试代码复制进去,分别在你的编译器上编译运行。这段程序包含了Fortran里最常用的几个语法要素:
program test_env implicit none integer :: i, n real(8) :: sum_val, arr(3) character(len=32) :: msg msg = "Environment OK" print *, trim(msg) n = 10 sum_val = 0.0d0 do i = 1, n sum_val = sum_val + i * 0.5d0 end do arr = (/ 1.0d0, 2.0d0, 3.0d0 /) print *, "sum = ", sum_val print *, "arr(3) = ", arr(3) print *, "done" end program test_env看这段程序的验证点:第一,print输出字符串,验证字符类型处理逻辑正常;第二,双精度浮点数real(8)的声明和计算,验证数值类型是标准8字节;第三,do循环结构,这是Fortran最核心的循环写法;第四,数组构造器语法,验证数组初始化的编译支持。如果你在编译这段代码时报错“Unsupported: real(8)”,那就说明编译器太老,比如2024年以前的远古GFortran版本对real(8)的支持会有问题,你可以改成real*8试试,但更推荐升级编译器。
编译方式按你的编译器来。Simply Fortran直接点击运行;IVF在VS里按Ctrl+F5;GFortran在CMD执行gfortran test.f90 -o test.exe然后运行。如果输出结果符合预期,说明环境不仅能跑,而且核心功能健全。
5.2 在Linux服务器上远程编译的验证思路
严格来说,Fortran大量部署在Linux服务器上。如果你最终要把程序放到超算中心或者实验室服务器上跑,那么Windows上装的编译器只是一个跳板。这时候更合理的做法是直接通过SSH连到服务器上,在服务器上写测试程序验证gfortran。在服务器上用命令gfortran test.f90 && ./a.out,这条命令第一次编译,第二次运行,一气呵成。如果你的服务器上没装gfortran,Ubuntu系统用sudo apt install gfortran,CentOS系统用sudo yum install gfortran,装完再做同样的验证。
关于验证,这里还有一个判断环境好不好的细节:如果你在Windows上编译的程序拷贝到Linux上不能跑,别怪编译器。Windows可执行文件格式是PE,Linux是可执行和可链接格式ELF,二者天生不通用。你需要在目标平台上重新编译。很多第一次接触Fortran的人栽过这个坑,以为编译好的程序是通用的,拷过去就跑。实际情况不是这样的,跨平台必须重建。
5.3 测试常见报错速查
验证阶段最常遇到的几类报错,我列出来,你再对照排查:
| 报错信息 | 可能原因 | 解决思路 |
|---|---|---|
| gfortran不是内部或外部命令 | PATH未配置 | 检查MinGW bin目录是否在环境变量里 |
undefined reference togfortran_runtime_error_at | gfortran运行时库索引问题 | 确认是否使用gfortran命令而非gcc编译Fortran代码 |
| Compilation failed | 代码语法错误或编译器版本过旧 | 定位代码行号,检查是否为老语法不兼容现代标准 |
| error #7001: 无法打开文件 | IVF找不到模块或文件路径异常 | 检查项目路径是否含中文,确认依赖模块路径 |
| 运行报Illegal instruction | 编译器生成的指令集不支持当前CPU | 调低优化等级,关闭高级向量化选项 |
这个表格不是让你死记,而是告诉你在排查时先从哪个方向下手。实际上呢,报错信息的最后一行往往才是真正原因所在,编译日志一大片的时候,先拖到底部看最末尾。
6. 常见问题排查实录与独家避坑技巧
6.1 安装过程的五大拦路虎
先说一个我亲眼见过无数次的场景:群里有人发了个截图,安装IVF到90%突然卡住不动,然后过一会儿弹窗“Setup failed”,下面的人七嘴八舌给出各种偏方。其实IVF这类大型编译器安装失败,原因通常就那么几个,逐个击破就好。
第一个:安装路径包含中文或者特殊字符。VS和Intel编译器组件数以千计,部分旧版安装程序对Unicode路径支持不利,一旦路径带中文,大概率在写注册表或者拷贝文件时失败。解决方法是把所有开发工具都装到英文路径下,这是Windows开发环境的基本素养。
第二个:已经安装过其他版本的Intel编译器残留。如果你之前装过2011版本的IVF,现在又要装2013,旧的许可证服务、系统服务项可能残留并和新的安装程序冲突。解决方法是先通过控制面板卸载旧版本,重启后清理Intel相关环境变量,再执行新安装。
第三个:权限问题。在Windows上,安装程序如果没有管理员权限,会在写系统目录和注册表时被拒绝。你可能踩到的异常是安装到一半弹窗说“access denied”,或者干脆没反应。解决方法是右键安装文件,选择“以管理员身份运行”。如果在账户控制(UAC)弹窗时直接点了否,也会出现类似问题。
第四个:杀毒软件干扰。编译器安装包会释放很多动态库和可执行文件,部分杀毒软件会误报,然后拦截或者隔离关键文件。碰上这种事,安装时临时关闭实时防护,装完再加入信任区,基本能解。
第五个:VS组件缺失。这个前面提到过,但值得再说一遍:IVF依赖VS的C++工具链,不是只装VS就行。你在安装VS时,一定要勾选“使用C++的桌面开发”工作负载。没勾就得重装VS,否则IVF白白忙活半天。
6.2 编译运行阶段的九个典型案例
安装成功之后,编译运行阶段的问题更多。我把这几年帮人调试碰到的典型情况梳理一下,挑九个高频的讲。
第一个,运行CMD的gfortran提示找不到。这不是安装失败,十有八九是PATH没刷新生效。处理方式:关掉CMD重新开,或者用where gfortran检查查找路径。第二个,项目路径带空格导致编译失败。VS和Simply Fortran多数能处理空格路径,但旧版编译器对空格的支持依然存在bug,直接换到一个纯英文无空格的目录去创建工程。第三个,代码中的格式字符串语法错误。这个纯粹是编程层面的错误,编译器会指出具体行号,初学者要耐心看错误提示,不要一报错就怀疑环境坏了。
第四个,链接阶段报找不到libifcoremd.lib一类依赖。这大概率是IVF环境变量没有正确配置,或者VS的库路径没有自动关联。检查VS项目属性里的VC++目录、库目录设置。第五个,运行时报数组越界但程序不报错。旧Fortran编译器默认不检查数组越界,程序会写出一种看似正常但结果错误的结果,调试时可以用编译器自带的检查选项,比如GFortran的-fcheck=bounds参数,在开发阶段开启它,发布阶段再关掉。
第六个,程序正常运行但输出中文乱码。这是Windows控制台编码问题,和编译器无关。Fortran输出中文到CMD窗口时,编码不匹配就会乱码。最省心的办法是在print之前调用系统命令chcp 65001切换UTF-8编码,或者干脆所有输出都用英文。说实话,做数值计算的人没必要在控制台界面上纠结中文,输出日志用英文是科研圈的通行习惯。
第七个,多文件模块依赖的处理错误。Fortran有module语法,模块文件是.mod格式,编译时会生成对应文件。如果你的main程序使用了某个module,但编译顺序不对,就会报“找不到模块”。解决办法是先把包含module的文件单独编译,再编译主程序,或者在Makefile里设定依赖顺序。
第八个,在Windows上编译Linux用户发的源码,报行太长错误。固定格式的Fortran每行长度限制是72个字符,在Windows上换行符和Linux不同,可能一个逻辑行被拆成了两部分。解决办法是检查源码是自由格式还是固定格式,用空格或制表符规范缩进,必要时编译时指定-ffree-form参数。
第九个,编译器更新版本后,老代码报一堆警告甚至错误。这类事情在Fortran里特别常见,因为新编译器对标准执行更严格了。比如老代码里隐式声明变量i、j、k是整数,新编译器默认选项还能兼容,但一旦开启-Implicit-none,就全盘报错。处理方式是代码加implicit none规范性检查,或者编译时加-allowArgumentMismatch之类的兼容参数,视编译器和代码具体情况来定。
6.3 比环境更重要的认知:环境只是起点
讲了这么多安装配置的细节,我想插一句作为一个常年用Fortran做计算的人的真心话:把编译器装好,只是你踏入Fortran这个领域的第一步,甚至可以说是最简单的一步。真正需要花时间的是把Fortran的语法、数组操作、模块化设计、以及和MPI、OpenMP并行库的搭配搞明白。安装环境的过程会让你觉得繁琐,但它也就折腾一次而已,而基础语法和编程思想是会一直陪伴你整个研究生涯或工程生涯的东西。
我见过太多的人,花了一整天装IVF,装好之后兴冲冲跑了个Hello World,然后就再也没碰过Fortran了。原因往往不是他们不勤奋,而是他们觉得环境都这么难搞,后面的内容岂不是更难。这个想法是误区。IVF难装是因为它是个庞大的商业工具链,牵扯VS、许可证、系统服务,而不是Fortran本身难。Fortran的基本语法非常简单直接,用修仙小说打比方,编译器是那把剑,顺手不顺手要看你选的路线,但你真正要练的是剑法,不是铸剑术。
7. 常用资源与个人经验的最后补充
7.1 值得收藏的下载渠道
为了让这篇文章真正帮到人,我把几个可信的下载渠道按路线整理出来,你在安装的时候照着这个走就好。
- Intel oneAPI工具包官网:intel.com/content/www/us/en/developer/tools/oneapi/。这是新版Intel Fortran的官方下载地址,替代老IVF,自带免费许可证,值得试试。
- Simply Fortran官网:approximatrix.com/products/simply-fortran。直接下载,免费试用。
- MinGW-w64官方安装程序:sourceforge.net/projects/mingw-w64/。安装时选x86_64架构即可。
- MSYS2官网:msys2.org。适合用pacman安装mingw-w64-x86_64-gcc-fortran。
- GFortran的Linux对应命令:Ubuntu用户sudo apt install gfortran,RHEL系用户sudo yum install gfortran。
关于Intel oneAPI多说一句,很多学校和企业现在的做法是用新的Intel oneAPI替代2013版。它不需要额外绑定VS的付费版本,也不需要序列号,编译器性能和老的IVF完全一系血脉,而且对现代处理器支持更好。如果你的代码不是那种只能在老IVF下编译的怪异旧工程,我强烈建议直接上oneAPI。
7.2 学习路径的个人体会
我个人实际带过不少学生从零开始学Fortran,一个高频被问的问题是“我应该看书还是直接看代码”。我会告诉他们先看代码,但前提是你已经掌握了最基础的语法元素。煮碗面你至少要知道锅在哪、火在哪开,然后你才能边做边学。同上,Fortran你至少得知道什么是program块、什么是变量声明、什么是do循环,然后针对你手头的代码去逐行拆解,不懂的语句查资料,这样效率最高。
如果你问有哪些书适合入门,我建议看一版经典的书册或官方语言参考文档就可以。Fortran语言标准本身在我不停进化,Fortran 2018已经成为主流标准,未来Fortran 2023也在路上。这就意味着你没必要抱着2005年前的老教程啃,那些书对于数组特性和面向对象设计的讲解非常落后。用新的参考资料,搭配Print自带的内置帮助文档或开源的gfortran文档,对现代Fortran的学习就已经足够了。
还有一个学习技巧是:把编译器和语言标准分开看。编译器版本新不代表你学的语法新,关键是代码要符合标准化写法。在写代码时尽量用符合标准Fortran 2018的语法,而不是某个编译器的扩展语法。这样你的代码可以轻松地在IVF、GFortran等多种编译器之间切换到没障碍,为以后部署到任何超算平台省去无数麻烦。
7.3 最后一个小技巧
顺手再送大家一个调试技巧:写Fortran代码的时候,习惯性地在每个独立程序单元的开头写上implicit none。这个简单的声明能强制要求所有变量显式声明,让编译器帮你抓住因为变量名拼写错误而导致隐蔽赋值错误的问题。在我见过的所有Fortran bug里,至少有一半是忘记声明变量或拼错变量名导致的计算结果错乱。虽然没有implicit none时程序也可能正常编译,但运行结果可能是完全错误的,而且极难排查。Fortran这门语言非常诚实——你给它什么,它就输出什么,所以让编译器多帮你一层把关,是非常必要的事情。
Fortran环境这件事,说到这儿基本就全覆盖了。装环境的过程确实琐碎,但换个角度想,这也是训练科研基本功的一部分:合理选择工具、梳理依赖关系、通过报错日志定位问题。这三项能力,放哪个领域都是通用的,甚至可以说这才是安装过程带给你的最大收益。编译器装好之后,前面就是Fortran代码的世界了,祝你顺利跑通第一个程序。