2009-12-22 133 views
15

我有一個32位.so二進制只庫,我必須生成使用它的64位程序。 有沒有一種方法來包裝或轉換它,所以它可以用於64位程序?將32位庫鏈接到64位程序

+0

我要建議重新編譯庫代碼靶向64位,但讓你沒有源給它的印象......我懷疑,如果一個64位代碼可以「咚」對面32bit..maybe它可以在linux的gcc?但是,這個'thunking'是Win95的一個特性(記住那個?)32位代碼調用16位代碼...你是否試過鏈接引用32位動態庫(.so)的64位代碼並運行它? – t0mm13b 2009-12-22 01:33:32

+0

在任何現代64位操作系統中都沒有「thunking」等值。這不起作用。 – 2009-12-22 01:42:57

回答

27

不可以。您不能直接鏈接到64位程序中的32位代碼。

最好的選擇是編譯一個32位(獨立)程序,可以run on your 64bit platform (using ia32),然後使用一種進程間通信的形式從它的64位程序進行通信。

+1

@ Reed:那麼Win95如何管理從32位代碼調用16位的轉換?是在彙編程序層面改變堆棧指針和寄存器? – t0mm13b 2009-12-22 01:41:05

+6

操作系統明確地處理了這個問題,但是在Linux或現代64位Windows操作系統中沒有任何東西允許這樣做,所以您必須使用像我發佈的解決方法。 – 2009-12-22 01:42:22

+0

@ Reed:謝謝你回答我的問題。 :) – t0mm13b 2009-12-22 01:45:07

3

這是可能的,但並非沒有幕後的一些嚴重的魔法,你會不喜歡的答案。要麼模擬一個32位CPU(不,我不是在開玩笑),或者將主進程切換回32位。儘管模擬可能會很慢。

該技術的This is a proof of concept

然後保留的表,每存儲器訪問和從32位庫保持同步。要達到理論完整性是非常困難的,但可行的事情應該很容易,但非常乏味。

在大多數情況下,我相信兩個進程,然後IPC兩者之間實際上可能是最簡單的,如建議othwerwise。

4

對於使用IPC運行從64位代碼的32位的插件的一個例子,請看開源NSPluginWrapper