25

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

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

4

10 回答 10

19

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

于 2010-01-08T14:36:54.507 回答
10

Statically linking your binaries makes them LESS portable because some libraries won't then work correctly for that machine (differing authentication methods, etc).

If you statically link any "unusual" libraries and keep your set of supported distros to a minimum, you should be ok.

Don't statically link the C library (or the whole binary), that's a recipe for trouble :)

Look at what (e.g.) Google do with Chrome.

于 2010-01-08T14:02:31.497 回答
6

What language is your application coded in? If its in a language like Python, (and no C bindings) or Java or any other VM based language, then I think you can trust the VM to make sure your application will work on the different Linux distributions.

Also, there is the Linux Standard Base which you can refer to.

HTH,Amit

于 2010-01-08T14:07:04.827 回答
5

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

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

有一次,我在运行cde命令时出错,该命令通过在命令前面加上 来修复LD_ASSUME_KERNEL=2.4.1,这在最近的版本中可能不是必需的,因为它是几年前的事了。

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

于 2016-02-15T08:57:57.307 回答
4

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

例如,请参阅Debian 政策手册,以获取描述发行版需要决定以确保在其上运行的应用程序之间的兼容性的许多事情的文档。您不需要通读或背诵它,但它显示了可能会绊倒您的问题的范围。

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

其他人已经提到的Linux 标准库试图为这些变量制定一个跨发行版的解决方案,但它并不全面,并且大多数发行版都没有完全支持。但是,大多数发行版如果不小心破坏了 LSB 兼容性,就会认为这是一个问题。

于 2010-01-08T14:55:13.083 回答
4

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

于 2010-01-08T13:20:36.950 回答
2

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

于 2010-01-08T13:19:52.147 回答
2

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

于 2010-01-08T13:22:04.170 回答
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

于 2012-09-26T20:25:58.823 回答
0

HTML怎么样?

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

这可能是我们这些天最接近机器语言的东西,这是一件好事,因为这意味着每个参与的人都可能有更多的选择。

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

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

于 2020-06-23T03:12:58.050 回答