【问题标题】:Loading a dylib from a different architecture从不同的架构加载 dylib
【发布时间】:2011-08-27 06:23:02
【问题描述】:

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

【问题讨论】:

  • 不是真的 - 你需要编写一些中间代码 - 谷歌用于“thunking” - 它相当复杂,具体取决于 dylib 的功能......

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


【解决方案1】:

您不能在 x86_64 可执行文件中加载 i386 库。

从 i386 中获取 x86_64 库的唯一方法是针对正确的目标重新编译它。如果您没有源代码,则无法做到这一点。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      如果那个库是不可替代的,你不能重新编译它,你真的需要程序的其余部分是 x86_64,你可以在一个单独的进程中运行它,并使用某种形式的 IPC 来调用代码并传递结果。
      但在很多情况下,重写库或将其替换为其他类似工作的库可能更容易。

      【讨论】:

        猜你喜欢
        • 2011-10-18
        • 2016-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-14
        • 2011-03-18
        • 2012-11-16
        • 2012-06-21
        相关资源
        最近更新 更多