Linux发行版二进制兼容性

25

有没有办法在Linux发行版中制作一个二进制文件,并在另一个相同架构的发行版上运行它?还是我应该在不同的发行版上编译和构建它?

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


7
由于有很多变量的影响,所以简短的回答是:这取决于具体情况。程序库可以弥补很大一部分差异。 - jldupont
10个回答

19

3
Linux AppChecker 工具基于 LSB,可以检查您的应用程序是否与许多 Linux 发行版(如 RedHat、Debian、SUSE 等)兼容。 - linuxbuild
@aponomarenko,链接失效。 - anatoly techtonik
2
@techtonik,备用链接为http://www.linuxfoundation.org/collaborate/workgroups/lsb/all-about-linux-application-checker - linuxbuild
@DiegoTorresMilano:Debian和Ubuntu已经停止支持,而它们代表了最大的用户群。接下来该怎么办? - user2284570

10
静态链接二进制文件会使它们 LESS 可移植,因为某些软件库可能无法在特定机器上正确运行(如认证方法不同等)。
如果您静态链接任何“不常用”的库并将所支持的发行版集保持到最小,那么应该没问题。
不要静态链接 C 库(或整个二进制文件),这是麻烦的源头 :)
看看 Google 如何处理 Chrome。

1
这并不完全正确,这取决于程序。我已经成功地交付了许多静态链接的二进制文件。想想编译器:它读取一个文件,执行一些操作,然后写入一个文件。你为什么认为这不能被静态链接呢? - Richard Pennington
你可以静态链接你的二进制文件,但它们就不能从 C 库的更新中受益,也不兼容发行版或最终用户管理员可能进行的其他更改,例如自定义 nss 库。 - MarkR

6
你的应用程序使用哪种编程语言编写?如果使用像Python(没有C绑定)或Java或任何其他基于虚拟机的语言,则我认为您可以信任虚拟机,以确保您的应用程序在不同的Linux发行版上运行。此外,还有Linux标准基础可供参考。
希望这对你有所帮助, Amit

5
我意识到这是一个非常老的问题,但它在搜索结果中排名很高,而且还没有被提及:CDE是一个创建便携式Linux应用程序的工具。该工具通过运行时分析打包所有所需文件(包括库文件)。我已经成功地多次使用它来处理命令行工具,例如在运行自定义发行版的旧硬件设备上运行tcpdump。CDE也不需要源代码,它只是打包了可执行文件供您运行。
有一次我运行cde命令时出现了错误,通过在命令前添加LD_ASSUME_KERNEL=2.4.1修复了这个问题,可能在最近的版本中不再需要,因为那是多年以前的事情了。
代码也可以在GitHub上找到:https://github.com/pgbovine/CDE

1
链接已失效。 - Osyotr

4

这个可以工作。但它也取决于你使用的共享库版本,包括libc、libstdc++等,这些都是由编译器版本强制指定的,可能因发行版而异。


4
最好的方法是分发源代码并使其易于在任何合理的Linux发行版上构建源代码。这比二进制分发更好,因为仅使二进制兼容共享库是不够的。您还需要确保将程序适应到诸如指定位置和约定放置Web应用程序的发行版、电子邮件发送方式、服务启动方式、确定默认纸张大小或其他无数细节等问题。
例如,请参见Debian Policy Manual,该文档描述了发行版需要决定的许多事情,以确保在其上运行的应用程序之间的兼容性。您不需要全部阅读或背诵它,但它显示了可能会使您犯错的问题范围。
您应该与几个主要发行版一起工作,以确保您的应用程序在所有发行版上都能良好运行。如果您礼貌地接近他们,大多数发行版的开发人员都会乐意提供帮助。如果您幸运的话,您可以吸引来自发行版的志愿者为您制作二进制包装,并迅速获得有关需要更改源级别以使应用程序易于打包的反馈。

其他人已经提到的Linux标准基础试图解决这些变量的跨发行版问题,但它并不全面,大多数发行版也没有完全支持。然而,如果它们意外破坏了LSB兼容性,大多数发行版都会认为这是一个问题。


2

通常情况下,只要有相同的库文件可用,跨Linux发行版使用二进制文件是可以的。您可以使用“ldd”命令检查二进制文件所需的库文件。在涉及的发行版中,libc 库应该具有相同的版本。


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

3
不,他不能。人们什么时候才能明白静态链接的可执行文件已不再受支持。请阅读LSB。 - Lothar

0

-1

那么HTML怎么样?

它是跨平台的,已经存在了很长时间,如果你查阅caniuse并且了解你的目标环境,它可以呈现我所梦想的任何UI。如果你愿意学习JavaScript,你可以从服务器编程和客户端编程的角度来处理这个问题,而不需要切换语言,这对于同时进行两者的人来说非常方便。

它可能是我们现在拥有的最接近机器通用语的东西,这是一件好事,因为这意味着每个人都有更多的选择。

人们不知道网络浏览器可以做大多数程序所需的事情,包括渲染3D图形和PGP风格的加密。

我认为作为一个平台,浏览器最大的好处是每个人的侄子都知道如何在新电脑上安装浏览器,从那里只需要一个URL,包括在一些商店中打包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接