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