2009-12-22 135 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