Linux 如何检测我是否可以在一个盒子上运行为gcc4编译的可执行文件?

Linux 如何检测我是否可以在一个盒子上运行为gcc4编译的可执行文件?,linux,gcc,Linux,Gcc,在没有安装开发工具(例如,没有标题,没有gcc)的生产Linux机器上,您如何判断它是否能够执行文件: 在gcc4.1.2下编译,而不是在gcc3.3.3下编译(我认为在版本3和版本4之间ELF有变化) 为64位而不是32位可执行文件编译 我们有一些遗留库,所以我们仍然使用gcc3.3.3,但正在迁移到gcc4.1.2,同事试图弄清楚如果我们可以执行用gcc4编译的东西,如何在新的远程设备上进行检测 我是否可以检查库的特定版本或ld-linux.so或类似的版本,而不是使用gcc4编译测试应

在没有安装开发工具(例如,没有标题,没有gcc)的生产Linux机器上,您如何判断它是否能够执行文件:

  • 在gcc4.1.2下编译,而不是在gcc3.3.3下编译(我认为在版本3和版本4之间ELF有变化)
  • 为64位而不是32位可执行文件编译
我们有一些遗留库,所以我们仍然使用gcc3.3.3,但正在迁移到gcc4.1.2,同事试图弄清楚如果我们可以执行用gcc4编译的东西,如何在新的远程设备上进行检测


我是否可以检查库的特定版本或ld-linux.so或类似的版本,而不是使用gcc4编译测试应用程序,然后尝试在新框上运行它?

生成的代码应该可以正常运行。您可以尝试运行,因为它使用机器动态链接器,您可以查看是否缺少任何库。

生成的代码应该可以正常运行。您可以尝试运行,因为它使用机器动态链接器,您可以查看是否缺少任何库。

我认为您所指的问题是GNU ld而不是gcc。为符号查找添加了一个新的哈希算法。您应该在gcc4中使用-Wl、-hash style=both或-Wl、-hash style=sysv(默认值)编译所有内容,这样您就不会有任何问题。从内存Redhat是唯一一个延迟到默认启用gnu哈希样式的发行版

如果这确实是您的问题,那么您可以通过以下操作来判断:

objdump-t foo | grep“.hash”


除非存在sysv哈希,否则它将为空。

我认为您所指的问题是GNU ld而不是gcc。为符号查找添加了一个新的哈希算法。您应该在gcc4中使用-Wl、-hash style=both或-Wl、-hash style=sysv(默认值)编译所有内容,这样您就不会有任何问题。从内存Redhat是唯一一个延迟到默认启用gnu哈希样式的发行版

如果这确实是您的问题,那么您可以通过以下操作来判断:

objdump-t foo | grep“.hash”


除非存在sysv散列,否则它将为空。

似乎没有一种简单的方法可以查看某些库的版本,以确定gcc4二进制文件是否可以正常运行


我个人对执行其他回复中提到的任何检查都没有问题,但我正在寻找一种静态方法来确定这一点,这样,我的团队中的其他人就可以检查linux框,而无需给我30分钟的时间介绍linux应该如何工作……

似乎没有一种简单的方法可以查看某些库的版本,以确定gcc4二进制文件是否可以正常运行


我个人对执行其他回复中提到的任何检查都没有问题,但我正在寻找一种静态方法来确定这一点,这样我的团队中的其他人就可以检查linux框,而无需给我30分钟的时间介绍linux应该如何工作…

我正在试图弄清楚该框是否设置为执行使用gcc4编译的内容。我假设您建议编译应用程序,然后将其复制到远程框,然后在其上运行ldd。这是我通常会做的,但我试图通过查看库或运行命令之类的东西来找出是否还有其他简单的方法。不过还是要谢谢你的建议。我正在试图弄清楚这个框是否设置为执行用gcc4编译的东西。我假设您建议编译应用程序,然后将其复制到远程框,然后在其上运行ldd。这是我通常会做的,但我试图通过查看库或运行命令之类的东西来找出是否还有其他简单的方法。不过还是谢谢你的建议。