2009-07-10 57 views
0

在你怎麼弄清楚它是否能夠執行東西沒有安裝開發工具生產的Linux機器(例如,無頭,無GCC):如何檢測我是否可以在一個盒子上運行爲gcc4編譯的可執行文件?

  • 下gcc4.1.2編譯,而不是在gcc3 .3.3(有3版和第4,我認爲之間的ELF的變化)
  • 編譯爲64位,而不是32個可執行文件

我們有一些遺留的圖書館,所以我們仍然使用gcc3.3.3但轉移到gcc4.1.2和同事試圖找出如何檢測如果我們可以執行使用gcc4編譯的東西,那麼在新的遠程盒子上。

我可以檢查特定版本的庫或ld-linux.so或類似的東西,而不是實際編譯與gcc4的測試應用程序,然後嘗試運行它在新的盒子?

回答

0

似乎沒有一種簡單的方法來查看某些庫的版本以確定gcc4二進制文件是否可以毫無問題地運行。

我個人對執行其他響應中提到的任何檢查沒有任何問題,但我一直在尋找一種靜態的方式來確定這一點,這樣我的團隊中的其他人就可以在不給我30分鐘的情況下檢查linux盒子有關如何Linux應該工作的演示文稿...

2

生成的代碼應該運行良好。您可以嘗試運行ldd,因爲它使用機器動態鏈接器,因此可以查看是否缺少任何庫。

+0

我想弄清楚,如果框設置執行與GCC4編譯的東西。我假設你建議編譯應用程序,然後將其複製到遠程框,然後在其上運行ldd。這是我通常會做的,但我試圖通過查看庫或運行命令或類似的東西來找出是否有其他簡單的方法。不過謝謝你的建議。 – stefanB 2009-07-10 07:19:59

1

我認爲你所指的問題是GNU ld不是gcc。爲符號查找添加了新的散列算法。你應該在gcc4中用-Wl, - hash-style = both或-Wl, - hash-style = sysv(缺省值)編譯所有東西,這樣你就不會有任何問題。從內存來看,Redhat是默認啓用gnu哈希風格的唯一版本。

如果這確實是你的問題,那麼你可以通過執行告知:

objdump的-t富| grep「.hash」

除非存在sysv散列,否則它將爲空。

相關問題