如何判断库是否使用某些GCC版本进行编译

时间:2017-03-15 19:13:14

标签: linux gcc

我在Unix机器上编译OpenSSL。默认编译器为GCC-4.4.7。我在另一个文件夹中放置了另一个编译器GCC-5.2.0。我通常会将替代编译器的路径添加到$PATH,以便gcc始终使用替代路径中的编译器。

但是现在我对我编译的库不确定,有没有办法告诉哪个gcc用于编译我的库?有关.o文件的解决方法也很受欢迎。

1 个答案:

答案 0 :(得分:6)

gcc和clang编译器套件会将一个版本字符串放在ELF文件的.comment部分中。 (如果生成中间汇编语言文件,则可以将此字符串视为.ident指令。)

GNU链接器会将其输入对象文件的所有.comment部分合并为一个部分,从而消除任何重复。

您可以通过运行readelf -p .comment /path/to/your/objectfile来阅读此部分。例如,这是一个由两个可重定位目标文件组成的可执行文件,一个用gcc编译,另一个用clang编译:

$ readelf -p .comment hello

String dump of section '.comment':
  [     0]  GCC: (Ubuntu 6.2.0-5ubuntu12) 6.2.0 20161005
  [    2d]  clang version 3.8.1-12ubuntu1 (tags/RELEASE_381/final)