如何找出使用的编译器:g77或gfortran

时间:2008-11-19 15:10:20

标签: gfortran g77

我正在为私有项目编译库,这取决于许多库。具体来说,其中一个依赖项是使用Fortran编译的。在某些情况下,我已经看到了使用g77编译的依赖项,而我看到它使用gfortran进行编译。然后,我的项目./configure要与-lg2c-lgfortran相关联,但到目前为止,我一直在手工制作。

如果有可能,我怎么能从查看依赖库(通过例如nm或其他一些实用程序?)中找出所使用的编译器是g77(然后是我') ll在我的链接选项中使用-lg2cgfortran(然后我会使用-lgfortran)?

提前致谢!

3 个答案:

答案 0 :(得分:6)

nm filename | fgrep ' __g77'
如果使用g77,

将给出结果,同时

nm filename | fgrep '@@GFORTRAN'
如果使用gfortran,

将给出结果。

答案 1 :(得分:3)

你需要在nm filename的输出中找一些东西来表示是否使用了g77或gfortran。在大多数情况下,如果库至少在一个地方输入输出,它将调用libg2c或libgfortran,您会注意到其中包含g77的符号,或gfortran。所以,你最好的选择是使用grep:

nm filename | grep _g77_
nm filename | grep _gfortran_

两个注释:

  1. 作为geocar建议的@@GFORTRAN的Grepping不可靠:它仅适用于支持库版本控制的平台,包括例如Linux但不是Windows或Mac OS。
  2. 某些已编译的代码仍然可能完全不调用支持库函数(如果它只是简单的算术并且没有输入输出,例如)。在这种情况下,除非使用调试选项进行编译,否则无法确定哪个编译器输出它。

答案 2 :(得分:1)

您可以通过使用nm来查明它,并查看已编译的代码是否使用了其中一个或哪些函数,但这非常糟糕。您可以根据可用的库来确定它(如果没有可用的libg2c,那么它不是g77,例如),但如果两者都可用,那么你仍然有一些歧义。如果您可以自己构建依赖项,那么您可以使用构建过程的一部分以某种方式告诉另一个部分(变量,文件等)您使用的那个。