如何找出使用了哪个编译器: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的主要内容,如果未能解决你的问题,请参考以下文章
如何找出哪个端点导致了 SocketException,UdpClient
如何找出哪个进程正在侦听 Windows 上的 TCP 或 UDP 端口?