2011-01-31 86 views
5

初始注意:該問題提到AIX是因爲它是初始上下文,但問題確實與gcc本身有關,很可能與平臺無關。GCC目標特異性和二進制兼容性

AIX應該是向後二進制兼容的:在AIX 5.1上編譯的C程序將在5.2,5.3,6.1和7.1上運行。

根據我的理解,應該構建gcc來針對特定系統(無論是在交叉編譯的情況下是當前還是另一個)。因此,構建在AIX 6.1上的gcc以AIX 6.1爲目標,並且由於二進制兼容性,可以在6.1和7.1上生成可用的二進制文件。

但是,構建在AIX 6.1上的gcc本身是一個6.1程序,所以它應該在7.1上按原樣執行。當然,如果我在7.1上編譯一個程序,這個程序可能會被鏈接或使用特定於7.1的頭文件,從而導致產生的二進制文件需要7.1。所以據我瞭解,我應該能夠在AIX 6.1上運行構建在AIX 6.1上的gcc到一臺7.1機器上,並且可能產生非最優但完全有效的二進制文件,儘管它們需要7.1作爲鏈接的副作用。

這看起來太像彩虹和獨角獸在璀璨的天空中跳舞。我聞起來有些腥,但缺乏gcc內臟的知識。請強大的人羣,啓發我。

tl; dr:基於平臺二進制兼容性生成在版本N + 1上運行的二進制文件,gcc是否可以在版本N + 1上運行並使用基於並針對版本N的OS /平臺?如果不是,什麼機制會阻止它?

+0

原始上下文:perzl.org/aix是一個非常棒的嘗試,它爲AIX提供了最新的RPM包。它特別提供了非常有用的GCC軟件包,每個AIX版本都有一個。不幸的是,AIX 7.1沒有GCC。我認爲我很幸運能夠使用gcc for AIX 6.1。 – Lloeki 2011-01-31 14:16:19

回答

2

這裏的啓示:你的問題是方式太籠統。爲了回答這個問題,有人就必須有

  • 知識,你關心
  • 的OS版本的操作系統,你關心
  • 照顧你的gcc版本有關

和然後研究這個三維矩陣的二進制兼容性。

防止二進制兼容性的機制太多,與您的操作系統和編譯器供應商的創造力直接相關。其中一種比較常見的方法是正式棄用API調用,刪除已發佈的兼容性庫,以及燒燬橋接器,如從a.out到ELF。