题
我正在为私有项目编译库,这取决于许多库。具体来说,其中一个依赖项是使用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_
两个注释:
- Grepping for
@@GFORTRAN
as geocar建议不可靠:它只适用于支持库版本控制的平台,包括例如Linux但不是Windows或Mac OS。 - 某些已编译的代码仍然可能完全不调用支持库函数(如果它只是简单的算术并且没有输入输出,例如)。在这种情况下,除非使用调试选项进行编译,否则无法确定哪个编译器输出它。 醇>
您可以通过使用nm来查明它,并查看已编译的代码是否使用了其中一个或哪些函数,但这非常糟糕。您可以根据可用的库找出它(如果没有可用的libg2c,那么它不是g77,例如),但如果两者都可用,那么你仍然有一些歧义。如果您可以自己构建依赖项,那么您可以使用构建过程的一部分以某种方式告诉另一个部分(变量,文件等)您使用的那个。
不隶属于 StackOverflow