【发布时间】:2011-06-05 01:10:51
【问题描述】:
有没有可能的方法来运行在另一个 Linux 上编译的二进制文件?我知道当然最简单的方法是在另一台机器上重建它,但让我们假设我们唯一能得到的是一个二进制文件,那么它可能吗? (我知道这可能并不容易,但我只是好奇)。
【问题讨论】:
标签: linux binary-compatibility compiled
有没有可能的方法来运行在另一个 Linux 上编译的二进制文件?我知道当然最简单的方法是在另一台机器上重建它,但让我们假设我们唯一能得到的是一个二进制文件,那么它可能吗? (我知道这可能并不容易,但我只是好奇)。
【问题讨论】:
标签: linux binary-compatibility compiled
如果二进制文件中使用相同或相似的库,这通常是可能的。每隔一段时间,您在不同版本的 Linux 上都有不同版本的库,最终会导致崩溃,但通常您可以运行 ldd 以查看可执行文件使用哪些库,然后在第二个平台上查看是否这些库也存在。
【讨论】:
虽然共享库匹配的事情是非常正确的(使用ldd 来获取需要相同的共享库列表),但系统需要是相同的架构(或者安装了兼容库/内核) x86 二进制文件在 x86_64 架构上运行)。
一种选择是静态链接(或提供您自己的共享库),这样您只需要内核 ABI 级别的兼容性。当然,这意味着使用非标准选项(NIS、LDAP 等)的系统/发行版有点混乱。
另一种选择是分发 .a 文件并在目标系统上执行最终链接。这当然假设系统有一个编译器,但对于对象分发来说可能是最可移植的。
但是,在所有情况下,您都必须具有架构兼容性。 x86 是最小的公分母,但绝不是唯一的。
【讨论】:
如果 libc 版本相同并且任何其他依赖的共享库可用,那么可以,您可以从其他 Linux 运行二进制文件。在目标平台上的二进制文件上使用“ldd -v”来查看是否缺少任何库。
【讨论】: