2010-10-28 76 views
2

我已經繼承了一個應用程序,該應用程序鏈接到可能已經使用gcc3構建的庫。或者用imagecraft編譯器。這些信息現在已經消失在天堂般的位域中,我剩下一個libXXX.a庫來鏈接我的應用程序。我無法重新編譯libXXX.a,因爲它需要來自imagecraft和某處的某些未知標題,這些標題可能在我的環境中無處不在,但現在無處可尋。avr-gcc 3.4.0與avr-gcc 4.3.x之間的二進制兼容性

我的問題是這樣的,只要我用avr-gcc版本3.4.0編譯我的應用程序(並鏈接到那個「特殊的」libXXX)導致一個可用的二進制圖像,是否有理由期望我可以編譯所有我的應用程序的其他部分與avr-gcc 4(這個行動有一些非常好的和證明的好處),與libXXX鏈接,仍然得到一個工作計劃?

本質上,它歸結爲:是avr-gcc二進制兼容「神祕的編譯器X,它可能是avr-gcc 3.something」?老實說,我已經用avr-gcc4成功編譯了我的應用程序的其餘部分,並將它與庫鏈接起來,並驗證了結果的正確性,但是我應該尋找哪種副作用或怪癖? ?

+1

這似乎是提及你可能已經知道的一個合適的時機:備份和修訂控制是你的朋友......但是你需要在過去使用它們來獲得現在的好處。它永遠不會太晚開始,你的未來自我會感謝你;-) – RBerteig 2010-10-28 07:27:04

+0

正如我所說,我繼承了這種情況...自那時起修訂控制已恢復,但它仍然無法幫助我:) – Manjabes 2010-10-28 07:32:55

回答

2

鏈接從不同的編譯器(或-versions)庫將可靠地工作,如果兩種編譯器使用相同的ABI(應用二進制接口)

特定平臺的ABI是由主導編譯該平臺通常指定但可以通過引用外部規範來完成。
ABI更改很少,尤其是如果平臺支持第三方庫/應用程序,因爲ABI更改意味着必須重建所有內容。