2015-05-27 24 views
0

我有一個使用g ++版本2.96構建的庫文件。 lib的源代碼不可用,也沒有原始開發人員的支持。如何將g ++ 2.96的lib版本翻譯成新的BFD格式?

我想它採用了最新的G ++版本(4.x的說)我的應用程序聯繫起來。據我瞭解,自gcc veriosn 3.3開始,名稱修改方案已發生變化。這就是爲什麼新的鏈接器不能識別舊的lib文件中的符號。

我已經做了一些關於網絡的研究,並研究了像objcopy,objdump,C++ filt和nm等工具,並嘗試手動查找和取消lib文件中的符號,但無濟於事。

那麼,有沒有一種方式(或工具),以改變我的老的二進制庫文件,以新名稱重整方案,所以我可以使用新的編譯器鏈接嗎?

回答

0

不,這是不可能的。

你不能只是翻譯mangled的名字,還有很多其他的東西在g ++ 2.96和g ++ 4.x之間不兼容,包括對象的佈局,異常處理機制,標準庫實現,虛函數是如何工作等

要麼得到的源代碼,舊的lib,或相剋創造一切++ 2.96,或更換舊的lib與具有相同行爲的新代碼。

+0

好約翻譯成稍微舊版本如gcc 3.4是什麼?那也不可能? –

+0

3.4與4.x兼容,但即使對於3.3或其他版本,也不可能在不兼容的ABI之間進行轉換。不可能。放棄。 –

+0

感謝您的及時回覆。只是好奇,如果它不是一個C++庫,而只是一個普通的C庫,你的答案會是相同的。它仍然不可能嗎? –