【问题标题】:Linux distribution binary compatibilityLinux 发行版二进制兼容性
【发布时间】:2011-01-02 22:05:53
【问题描述】:

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

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

【问题讨论】:

  • 变量太多了,所以简单的答案是:视情况而定。库弥补了这种差异。

标签: linux binary-compatibility


【解决方案1】:

HTML怎么样?

它是跨平台的,它一直存在,如果您咨询caniuse,您就会知道您的目标环境。它可以呈现我梦寐以求的任何 UI,如果你愿意学习 javascript,你可以从服务器编程的角度和客户端编程的角度来解决这个问题,而无需切换语言,如果你是这样做的人,这会派上用场两者都有。

这可能是当今我们所拥有的最接近机器语言的法国语言,这是一件好事,因为这意味着参与的每个人都可能有更多的选择。

人们不知道 Web 浏览器会执行您希望从程序中执行的大多数操作,包括渲染 3D 图形和 PGP 样式加密。

我在浏览器作为一个平台看到的最大好处是每个人的侄子都知道如何在新计算机上安装浏览器,并且从那里只需一个 url,包括在一些商店中的包装。

【讨论】:

    【解决方案2】:

    我意识到这是一个非常古老的问题,但它在搜索结果中的排名很高,并且没有被提及:

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

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

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

    【讨论】:

      【解决方案3】:

      LSB 绝对值得一试。尽管在使用库方面,我对 SO https://stackoverflow.com/questions/1209674/shipping-closed-source-application-for-linux/1242738#1242738 的这个答案以及对 rpath 机制 http://www.eyrie.org/~eagle/notes/rpath.html 的详细处理感到最满意

      【讨论】:

        【解决方案4】:

        最好的方法是分发源代码,并使在任何合理的 Linux 发行版上构建源代码变得容易。这比二进制分发要好,因为它不足以使二进制与共享库兼容。您还需要确保您的程序适应诸如分发指定位置和网络应用程序去向的约定、电子邮件的发送方式、服务的启动方式、或如何确定默认纸张大小等内容。其他细节。

        例如,参见Debian Policy Manual 的文档,该文档描述了发行版需要决定以确保在其上运行的应用程序之间的兼容性的许多事情。您无需通读或背诵它,但它显示了您可能遇到的问题的范围。

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

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

        【讨论】:

          【解决方案5】:

          输入 Linux Standard Base 以减少各个 Linux 发行版之间的差异。 见

          【讨论】:

          • Linux AppChecker 工具基于 LSB,可以检查您的应用程序是否与 RedHat、Debian、SUSE 等许多 Linux 发行版兼容。
          • @aponomarenko,链接断开。
          • @DiegoTorresMilano :代表最大用户群的 debian 和 Ubuntu 放弃了支持。下一步是什么?
          【解决方案6】:

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

          另外,您可以参考Linux Standard Base

          HTH,阿米特

          【讨论】:

            【解决方案7】:

            静态链接二进制文件会使它们的可移植性降低,因为某些库将无法在该机器上正常工作(不同的身份验证方法等)。

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

            不要静态链接 C 库(或整个二进制文件),这会带来麻烦 :)

            看看(例如)Google 用 Chrome 做了什么。

            【讨论】:

            • 嗯,这并不完全正确,具体取决于程序。我已经多次成功交付静态链接的二进制文件。想想编译器:它读取一个文件并写入一个文件。是什么让您认为不能静态链接?
            • 您可以静态链接您的二进制文件,但它们不能从 C 库的更新中受益,也不能与发行版或最终用户管理员可能进行的其他更改兼容,例如自定义 nss 库。
            【解决方案8】:

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

            【讨论】:

            • 不,他不能。人们什么时候才知道不再支持静态链接的可执行文件。阅读 LSB。
            【解决方案9】:

            它有效。但这也取决于您使用的共享库的版本,包括 libc、libstdc++,它们是由可能因发行版而异的编译器版本强制的。

            【讨论】:

              【解决方案10】:

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

              【讨论】:

                猜你喜欢
                • 2010-12-18
                • 1970-01-01
                • 2013-02-14
                • 1970-01-01
                • 2013-12-09
                • 1970-01-01
                • 2015-10-11
                • 1970-01-01
                • 2020-05-12
                相关资源
                最近更新 更多