2011-11-04 68 views
2

昨天我遇到了一个问题,我的程序在32位程序中失败。无法在OSX上从64位进程加载32位dylib,反之亦然?

我有一个dylib编译为64位,我在64位应用程序上使用它。但是当我将它转换为32位进行测试并尝试加载时,它没有奏效。 dlopen()返回NULL?

我是否需要分别为32位和64位二进制的32位和64位dylib?有什么解决办法吗?

回答

4

是的,你需要32位库为32位进程,64位库为64位进程。没有解决方法。

+1

严格地说,有一种产生32位进程的“解决方法”,通过某种形式的IPC将调用调解到库中,但除非真正需要**,否则我不会这么做。 。 –

+2

有一个更好的“解决方法”:将所有库构建为fat(多体系结构)二进制文件,以便它们可以在32位和64位进程中使用。 –

2
  1. 可以建立与一个64位编译反之亦然32位二进制文​​件,和副 。
  2. 在32位内核上启动时,您可以构建和运行64位二进制文​​件,反之亦然。
  3. 无法将32位版本 与64位二进制文​​件进行链接,反之亦然。
+0

第2点是错误的。您通常无法在x86上运行32位操作系统上的64位代码(不包括虚拟化事物)。 – Mat

+2

第2点对于OS X是正确的 - 它可以在32位内核下运行64位进程。事实上,从10.4版本开始,即使它在10.6之前没有包含64位内核(并且通常在10.7之前通常不使用64位内核),它仍然可以使用。 –

相关问题