You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cygwin或VS Code中使用gfortran运行Fortran程序

问题根因

报错Fatal Error: File 'fuinput.mod' opened at (1) is not a GNU Fortran module file的核心原因是:不同Fortran编译器生成的.mod模块文件二进制格式完全不通用。你之前用Silverfrost Plato编译程序时,已经在源码目录生成了适配Silverfrost编译器的fuinput.mod文件,后续切换到Cygwin gfortran、VS Code调用gfortran编译时,gfortran会优先读取目录下已存在的旧.mod文件,识别到格式不匹配就直接终止编译。

可行解决步骤
  • 第一步:彻底清理源码目录下所有非源码的编译产物
    删除目录内所有后缀为.mod、.obj、.o、.exe、.a、.so的文件,不管是你之前用Silverfrost编译生成的,还是源码压缩包自带的预生成文件,全部删除。所有.mod文件必须由你当前使用的gfortran从对应源码重新生成,不能复用其他来源的模块文件。
  • 第二步:确认gfortran编译环境正常
    在你实际用来编译的终端(Cygwin终端或VS Code集成终端)里执行gfortran --version,确认能正常输出版本信息,避免出现多环境路径冲突——比如系统同时装了MinGW gfortran和Cygwin gfortran,导致实际调用的编译器和预期不一致。
  • 第三步:按模块依赖顺序编译源码
    Fortran编译必须严格遵守依赖顺序:被其他代码依赖的模块源码要先编译,最后再编译主程序文件。举个例子,如果fuinput.mod对应的源码是fuinput.f90,就要先编译这个模块文件:
    gfortran -c fuinput.f90
    
    执行完这一步你会看到目录下生成了gfortran格式的fuinput.mod和对应的目标文件fuinput.o,之后再按依赖顺序依次编译其他子程序模块,最后把所有目标文件链接成可执行程序即可。
  • 可选优化:如果源码文件数量多、手动排序容易出错,可以写简单的Makefile管理编译顺序,避免每次手动清理、按顺序编译出错。
注意事项

不要混用不同编译器生成的任何中间产物(.mod、.o/.obj、静态库/动态库),只要切换Fortran编译器,第一件事就是清空所有旧编译产物重新全量编译,否则必然出现格式不兼容类的报错。
如果在VS Code中配置编译任务,要明确指定gfortran的完整路径,确保任务调用的编译器和你在终端中验证版本的gfortran是同一个程序。

内容的提问来源于stack exchange,提问作者franklin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 04:36:15