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

时间:2016-06-07 13:47:29

标签: module compilation fortran

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

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

我在某些方面遇到类似的问题,包括库和模块文件但没有来源。因为在某些情况下获取正确的编译器比获取重新编译的源代码更容易,或者只重新编译OP提到的一些内容,我发现在SO上某处获得gfortran模块的版本是很有用的。遗憾的是,这些信息并不容易找到,因此需要进行逆向工程,欢迎任何人编辑和添加更多信息。

我做了一些谷歌搜索,这是起点: 对于gfortran,根据this page,模块版本控制出现在“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 

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

  

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

可以从this link读取。他们没有给出版本号,似乎当他们说增加时,它会增加2。 gfortran版本8中模块版本的更新增加1,gfortran wiki在此编写时没有说明任何内容。感谢matthieu-verstraete挖掘它。

答案 2 :(得分:1)

对于最新的gfortran版本:

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