2011-08-27 28 views
0

我目前有一個程序,我在x86_64中編譯過,它依賴於也在x86_64中編譯的相當多的庫(因此重新編譯它們都將是一個大項目)。我期待運行i386 dylib,但是無論何時使用dlopen加載它,我都會收到一個錯誤消息,說它不是爲我的架構而構建的。有沒有辦法將i386 lib直接轉換爲x86_64(我沒有這個源代碼)或者在x86_64架構上運行它?從不同的體系結構中加載dylib

+0

不是真的 - 你需要編寫一些中間代碼 - 谷歌的「thunking」 - 這是相當複雜的,取決於dylib的作用... – Yahia

回答

3

無法在x86_64可執行文件中加載i386庫。

只有從i386獲得x86_64庫的方法是重新編譯它以獲得正確的目標。如果您沒有源代碼,則無法完成。

你可以重新編譯所有你的i386的代碼,然後使用這個庫。

2

無法將32位(i386)庫(dylib)加載到64位(x86_64)進程中,反之亦然。

該機器可以運行32位或64位進程;你不能做的是在一個進程中混合使用32位和64位代碼。

2

如果這個庫是不可替代的,你不能重新編譯它,並且你真的需要程序的其餘部分是x86_64,你可以在一個單獨的進程中運行它,並使用某種形式的IPC來調用代碼並傳遞結果。
儘管在很多情況下,重寫庫或將其替換爲執行類似工作的其他內容可能更容易。