如何找出使用的编译器是 g77 还是 gfortran?

8
我正在为一个私有项目编译库,其中依赖于一些其他库。具体来说,其中一个依赖项是用Fortran编译的。在某些情况下,我看到这个依赖项使用g77编译,在其他情况下,我看到它使用gfortran编译。然后我的项目会通过./configure链接到-lg2c-lgfortran,但到目前为止我一直是手动完成的。
如果可能的话,我该如何从依赖库中找出使用的编译器是g77(然后我将在我的链接选项中使用-lg2c)还是gfortran(然后我将使用-lgfortran)?可以通过查看依赖库(例如通过nm或其他实用工具)吗?
提前感谢!
3个回答

6
nm filename | fgrep ' __g77'

如果使用了g77,将会得到结果,同时

nm filename | fgrep '@@GFORTRAN'

如果使用gfortran,将会得到结果。


3

您需要在nm filename的输出中搜索某些内容,以确定是使用了g77还是gfortran。在大多数情况下,如果库至少在一个地方进行输入输出,它将调用libg2c或libgfortran,并且您将注意到其中带有g77gfortran符号的标志。因此,最好使用grep:

nm filename | grep _g77_
nm filename | grep _gfortran_

需要注意两点:

  1. 像geocar建议的使用@@GFORTRAN进行grep不是很可靠:它只能在支持库版本控制的平台上工作,例如linux,但不包括Windows或Mac OS。
  2. 如果一些编译代码完全没有调用任何支持库函数(例如只进行简单算术运算且没有输入输出),那么在这种情况下,除非它被编译时开启了调试选项,否则无法确定它所使用的编译器。

1

你可能可以通过使用 nm 命令并查看编译后的代码是否使用了其中一个库中的函数来解决问题,但这是一种比较麻烦的方法。如果有 libg2c 库可用,那么你就可以根据其可用性来判断它是否是 g77 编译的,但如果两个库都可用,则仍然存在一些歧义。如果你可以自己构建依赖关系,那么你可以让构建过程的一部分告诉另一部分你使用了哪个库(变量、文件等方式)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接