Linux发行二进制兼容性

时间:2010-01-08 13:16:12

标签: linux distribution binary-compatibility

如何在Linux发行版中制作二进制文件并在具有相同架构的另一个发行版上运行它?或者我应该在不同的发行版上编译和构建它?

Redhat,基于Debian的二进制文件发行版之间是否存在兼容性? (我想在fedora上使用我的Ubuntu二进制文件!)

10 个答案:

答案 0 :(得分:18)

输入 Linux标准库以减少各个Linux发行版之间的差异。 参见

答案 1 :(得分:10)

静态链接二进制文件会使它们变得无法移植,因为某些库将无法正常运行(不同的身份验证方法等)。

如果您静态链接任何“异常”库并将支持的发行版集保持在最低限度,那么您应该没问题。

不要静态链接C库(或整个二进制文件),这是一个麻烦的方法:)

了解Google(例如)谷歌对Chrome的看法。

答案 2 :(得分:6)

您的应用程序编码的语言是什么?如果它使用Python,(并且没有C绑定)或Java或任何其他基于VM的语言,那么我认为您可以信任VM以确保您的应用程序可以在不同的Linux发行版上运行。

此外,您可以参考Linux Standard Base

HTH,阿米特

答案 3 :(得分:5)

我意识到这是一个非常古老的问题,但它在搜索结果中占据了很高的位置而且还没有被提及:

CDE is a tool to create portable Linux applications。此工具通过在运行时分析将所有需要的文件(包括库)打包在一起。我已经多次在命令行工具上成功使用它,一个例子是让tcpdump在运行自定义发行版的旧硬件设备上运行。 CDE也不需要源代码,它只是打包一个你能够运行的可执行文件。

有一次我运行cde命令时遇到错误,该命令是通过在LD_ASSUME_KERNEL=2.4.1前添加命令来修复的,这可能在最近几个版本中没有必要,因为它已经过了几年。

代码也在GitHub上:https://github.com/pgbovine/CDE

答案 4 :(得分:4)

有效。但它还取决于您使用的共享库的版本,包括libc,libstdc ++,它们可能是编译器版本强制,可能与发行版和发行版不同。

答案 5 :(得分:4)

最好的方法是分发源代码,并在任何合理的Linux发行版上轻松构建源代码。这比二进制分发更好,因为它不足以使二进制文件与共享库兼容。您还需要确保您的程序适应于分发指定的位置和Web应用程序所在位置的约定,或者如何发送电子邮件,或如何启动服务,或如何确定默认纸张大小,或无数其他细节。

例如,请参阅Debian Policy Manual文档,其中描述了分发需要决定的许多事项,以确保在其上运行的应用程序之间的兼容性。您不需要通读或了解它,但它显示了可能会让您感到沮丧的问题的范围。

您应该与几个主要发行版一起工作,以确保您的应用程序能够很好地与所有这些发行版一起使用。如果你礼貌地接近它们,大多数发行版的开发人员都会很乐意提供帮助。如果你很幸运,你可以吸引来自发行版的志愿者为你做二进制包装,这将很快就你需要在源代码级别进行更改提供反馈,以使你的应用程序易于打包。

其他人已经提到的Linux Standard Base试图找出这些变量的交叉分配解决方案,但它并不全面,并且不是大多数发行版都完全支持的。但是,大多数发行版认为如果它们意外破坏LSB兼容性就会成为问题。

答案 6 :(得分:2)

通常,只要您拥有相同的库集,就可以在Linux发行版中使用二进制文件。您可以使用'ldd'来检查二进制文件需要哪些库。 libc应该确保在所涉及的发行版中具有相同的版本。

答案 7 :(得分:2)

您可以静态链接可执行文件以实现可移植性。

答案 8 :(得分:0)

LSB绝对值得一试。虽然在与图书馆合作方面,我对SO https://stackoverflow.com/questions/1209674/shipping-closed-source-application-for-linux/1242738#1242738的答案以及对rpath机制的详细处理感到非常满意http://www.eyrie.org/~eagle/notes/rpath.html

答案 9 :(得分:0)

HTML怎么样?

这是一个跨平台的平台,已经存在了很长时间,如果您咨询caniuse,您就会知道目标环境。它可以呈现我梦dream以求的任何UI,并且如果您愿意学习javascript,则可以从服务器编程角度和客户端编程角度来解决此问题,而无需切换语言,如果您这样做,这将非常方便。两者。

这可能是最近几天我们最接近的一种机器语言,这是一件好事,因为这意味着涉及到的每个人都有更多选择。

人们不知道网络浏览器可以执行程序所需的大多数功能,包括渲染3D图形和PGP样式加密。

我在浏览器中看到的最大好处是,每个人的侄子都知道如何在新计算机上安装浏览器,而从那里就只有一个URL,包括一些商店的包装。