2010-01-08 119 views
20

任何方式在Linux发行版中创建二进制文件并在具有相同体系结构的另一个发行版上运行它?或者我应该在不同的发行版上编译和构建它?Linux发行版二进制兼容性

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

+7

有这么多的变量,这样简单的答案是:这取决于。这些图书馆弥补了这一差异。 – jldupont 2010-01-08 13:20:19

回答

17

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

+2

[Linux AppChecker](http://ldn.linuxfoundation.org/lsb/check-your-app)工具基于** LSB **,可以检查您的应用程序是否与许多Linux发行版(如RedHat,Debian,SUSE)兼容和别的。 – aponomarenko 2011-10-20 19:59:57

+0

@aponomarenko,断开的链接。 – 2014-01-14 12:25:29

+2

@techtonik,替代链接是http://www.linuxfoundation.org/collaborate/workgroups/lsb/all-about-linux-application-checker – aponomarenko 2014-01-14 19:47:28

2

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

3

它的工作原理。但是它也取决于你使用的共享库的版本,包括libc,libstdC++,它们的编译器版本是,被迫为,这可能与发行版到发行版不同。

2

您可以静态链接您的可执行文件以实现便携性。

+3

不,他不能。什么时候人们得到​​它,不再支持静态链接的可执行文件。阅读LSB。 – Lothar 2010-08-30 23:57:33

10

静态链接你的二进制文件使得它们很容易移植,因为有些库不能正确地为那台机器工作(不同的认证方法等)。

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

不要静态链接的C库(或整个二进制),这是自找麻烦:)

看什么(例如)谷歌Chrome浏览器做一个配方。

+0

嗯,这不完全正确,取决于程序。我已经成功交付了多次静态链接的二进制文件。想想一个编译器:它读取一个文件并且写入一个文件。是什么让你认为这不能被静态链接? – 2010-01-08 14:44:15

+0

您可以静态链接您的二进制文件,但它们无法从C库的更新中受益,也不能与发行版或最终用户管理员可能做出的其他更改相兼容,例如,自定义nss库。 – MarkR 2010-01-08 22:03:00

6

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

另外,还有你可以参考的Linux Standard Base

心连心,阿米特

4

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

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

您应该与几个主要的发行版一起工作,以确保您的应用程序与所有主要发行版一起运行良好。如果你礼貌地接近他们,大多数发行版的开发者都会很高兴地提供帮助。如果幸运的话,您可以吸引发行商的志愿者为您制作二进制包装,这将很快为您提供有关在源代码级需要更改的反馈,以便您的应用程序易于打包。

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

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