如何找出使用了哪个编译器:g77 或 gfortran

Posted

技术标签:

【中文标题】如何找出使用了哪个编译器:g77 或 gfortran【英文标题】:How to find out which compiler was used: g77 or gfortran 【发布时间】:2008-11-19 15:10:20 【问题描述】:

我正在为一个私人项目编译库,它依赖于许多库。具体来说,其中一个依赖项是用 Fortran 编译的。在某些情况下,我看到使用 g77 编译的依赖项,在其他情况下,我看到使用 gfortran 编译的依赖项。然后我的项目是./configure'd 与-lg2c-lgfortran 链接,但到目前为止我一直在手动完成。

如果可能的话,我如何通过查看依赖库(例如通过nm 或其他实用程序?)找出使用的编译器是否为g77(然后我将使用@987654328 @ 在我的链接选项中)或gfortran(然后我将使用-lgfortran)?

提前致谢!

【问题讨论】:

【参考方案1】:
nm filename | fgrep ' __g77'

如果同时使用g77会给出结果

nm filename | fgrep '@@GFORTRAN'

如果使用 gfortran 会给出结果。

【讨论】:

【参考方案2】:

您需要在nm filename 的输出中使用 grep 来指示是否使用了 g77 或 gfortran。在大多数情况下,如果库至少在一个地方进行输入输出,它将调用 libg2c 或 libgfortran,您会注意到其中包含 <em>g77</em><em>gfortran</em> 的符号。所以,最好的办法是使用 grep:

nm filename | grep _g77_
nm filename | grep _gfortran_

两个音符:

    Grepping for @@GFORTRAN 如 geocar 建议的那样是不可靠的:它只能在支持库版本控制的平台上工作,包括例如linux 但不是 Windows 或 Mac OS。 某些编译后的代码仍然可能调用完全不支持的库函数(例如,如果它所做的只是简单的算术并且没有输入输出)。在这种情况下,除非使用调试选项进行编译,否则无法判断是哪个编译器输出它。

【讨论】:

【参考方案3】:

您也许可以通过使用 nm 来解决这个问题,并查看编译后的代码是否使用了其中一个或另一个中的函数,但那是相当的 hack。您可能能够根据可用的库来确定它(例如,如果没有可用的 libg2c,则它不是 g77),但是如果两者都可用,您仍然会有一些歧义。如果您可以自己构建依赖项,那么您可以使用构建过程的一部分告诉另一部分(变量、文件等)您使用了哪个。

【讨论】:

以上是关于如何找出使用了哪个编译器:g77 或 gfortran的主要内容,如果未能解决你的问题,请参考以下文章

在ubuntu下安装fortran

使用 fink 安装 g77 [关闭]

如何找出哪个端点导致了 SocketException,UdpClient

如何找出哪个进程正在侦听 Windows 上的 TCP 或 UDP 端口?

如何找出哪个进程正在侦听 Windows 上的 TCP 或 UDP 端口?

如何找出哪个程序集拥有从给定的“编译”对象及其声明语法引用中获得的给定 ISymbol 对象?