繁体   English   中英

是否可以确定哪个 Fortran 编译器生成了“.mod”文件?

[英]Is it possible to determine which Fortran compiler generated a “.mod” file?

假设我的机器上已经安装了一个包,我想弄清楚是否需要重新生成模块包含文件 ( .mod ) 以使它们与我编译的其余部分兼容。 有没有办法做到这一点?

如果模块是使用 gfortran 构建的,那么在 mod 文件(在 Linux 上)上使用字符串将提供编译器名称和版本号。 但是,对于英特尔,strings 命令只会显示编译器版本号。

我在某个时候遇到了类似的问题,库和模块文件但没有来源。 因为在某些情况下获得正确的编译器比获得重新编译的源代码更容易,或者只重新编译 OP 提到的少数东西,我发现在 SO 上的某个地方获得 gfortran 模块的版本控制很有用。 可惜资料不好找,所以需要逆向工程,欢迎大家编辑补充。

我做了一点谷歌搜索,这里是起点:对于 gfortran,模块版本控制出现在“gfortran 4.4”根据这个页面 重要的是要说版本号是针对模块而不是针对编译器的。 我猜当模块文件的格式更改以考虑一些新功能时,它会更改。

通过结合来自this pagethis pagesthis one和 matthieu-verstraete 的回答的信息,我想出了这份通信清单。

GCC version    module file version
-----------------------------------
up to 4.3.2    unversioned
4.4            0
4.5.1          4
4.6.3          6
4.7.0pre       8
4.7.1          9
4.8.[1-3]      10
4.9.2          12
5.1.0          14
8.1.0          15 
9              15
10             15
11             15

4.8版本开始,当模块版本发生变化时,gfortran 团队会在发行说明中包含一条小消息。 该消息看起来像

模块文件:模块文件 (.mod) 的版本已增加

因为它可以从此链接阅读。 他们没有给出版本号,似乎当他们说 incremented 时,它增加了2 gfortran 版本 8 中模块版本的更新增加了 1,在撰写本文时,[gfortran wiki] 5没有对此进行任何说明。 感谢 matthieu-verstraete 挖掘它。

对于最近的 gfortran 版本:

  1. cp mymodule.mod test.mod.gz
  2. gunzip test.mod.gz
  3. 读取文件 test.mod - 第一行将包含模块版本,这是 gfortran 开发人员的内部计数器。 有关通信列表,请参阅上面的帖子。 对于 gfort 8.1.0,我们的版本是 15。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM