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

时间:2009-07-10 07:11:05

标签: linux gcc

在没有安装开发工具的生产Linux机器上(例如没有标题,没有gcc)你怎么知道它是否能够执行的东西:

  • 在gcc4.1.2下编译而不是gcc3.3.3(我认为版本3和版本4之间的ELF有变化)
  • 编译为64位而不是32位可执行文件

我们有一些遗留库,所以我们仍然使用gcc3.3.3但是正在转向gcc4.1.2并且同事试图弄清楚如何在新的远程盒子上检测我们是否可以执行用gcc4编译的东西。

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

如果确实这是你的问题,那么你可以这样做:

objdump -t foo | grep“.hash”

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

答案 2 :(得分:0)

似乎没有一种简单的方法来查看某些库的版本,以确定gcc4二进制文件是否可以毫无问题地运行。

我个人对执行其他响应中提到的任何检查没有任何问题,但我一直在寻找一种静态的方法来确定这一点,以便我的团队中的其他人可以检查linux框而不给我30分钟的演示关于linux应该如何工作...