从不同的架构加载dylib

时间:2011-08-27 06:23:03

标签: c++ c macos x86-64 i386

我目前有一个我在x86_64中编译的程序,它依赖于在x86_64中编译的很多库(因此重新编译它们都是一个大项目)。我正在寻找运行i386 dylib,但每当我使用dlopen加载它时,我得到一个错误,说它不是为我的架构而构建的。有没有办法将i386 lib直接转换为x86_64(我没有这个的源代码)或者在x86_64架构上运行它?

3 个答案:

答案 0 :(得分:3)

您无法在x86_64可执行文件中加载i386库。

只有从i386中获取x86_64库的方法是为正确的目标重新编译它。如果您没有源代码,则无法完成此操作。

您可以重新编译i386的所有代码并使用该库。

答案 1 :(得分:2)

您无法将32位(i386)库(dylib)加载到64位(x86_64)进程中,反之亦然。

机器可以运行32位或64位进程;你不能做的是在一个过程中混合使用32位和64位代码。

答案 2 :(得分:2)

如果该库是不可替代的,则无法重新编译它,并且您确实需要将该程序的其余部分设置为x86_64,您可以在单独的进程中运行它并使用某种形式的IPC来调用代码并传递结果。
但在很多情况下,重写库或用其他类似工作的东西替换它可能更容易。