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

如果有可能,我怎样才能从查看依赖库(通过例如nm或其他一些实用程序?)中找出所使用的编译器是否为<=>(然后我将使用<= >在我的链接选项中)或<=>(然后我将使用<=>)?

提前致谢!

有帮助吗?

解决方案

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

将给出结果,同时

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

将给出结果。

其他提示

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

nm filename | grep _g77_
nm filename | grep _gfortran_

两个注释:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top