为多个平台构建 Linux 二进制文件

2023-11-26

帮我算个账吧。

我有一个用 C++ 编写的软件,旨在在尽可能多的 Linux 发行版上运行,我需要找出一种有效的策略。在这种情况下,我试图发送二进制文件而不是源代码(可能很高兴知道)。它已经是一个商业产品,我的知识产权问题阻止了我开源该产品,但也意味着我必须处理无数的 GPL 问题。

目前的推理思路是选择一个最小公分母并以此为基础构建一切。我发现这有两个主要影响,但效果适得其反。

  1. 旧版本 GCC 中的 C++ 支持缺乏一些更现代的 C++ 功能。
  2. 最小公分母需要 Red Hat Enterprise Linux 4 (RHEL4)

我绝对不需要整个 C++11 功能集,但我想将 C++ 支持提升到 Visual C++ 2010。我正在仔细研究使用 Clang/libc++ 而不是 GCC/libstdc++ 的想法在可能的情况。

RHEL4 似乎没有对构建 C++ 应用程序提供广泛的跨平台支持,而且,我对跨不同版本的 Linux 的 ABI 稳定性知之甚少,但我担心 RHEL4 带来的麻烦多于价值。尝试基于少数几个发行版来构建所有发行版并不是一个可行的策略。

我的假设是,为不同的 Linux 发行版编译软件的最好方法是使用目标平台上的工具为目标平台编译软件。我目前的假设是,如果您不接受这一点,您将遇到跨 Linux 平台的巨大可移植性问题。更不用说由于 C++ ABI 跨平台/发行版的不稳定性,您可以链接或无法链接的许多库。

但我可能是错的,我想听听定期处理这个问题的人的意见。什么会起作用以及为什么?或者更重要的是,什么不起作用?


您可以尝试专注于几个主要平台而不是单个发行版。我的意思是建立在我所谓的“基础发行版”(Debian 和 RedHat)的基础上,并希望其他发行版能取得最好的成绩。

最有可能的是,Debian 二进制文件(静态链接)可以在 Ubuntu 和 Mint 以及其他 Debian 派生发行版上正常运行。 RedHat 二进制文件可能会在 Centos、Scientific Linux 和 SuSE Linux 上运行。如果您关心不太受欢迎的发行版(假设您有很多客户运行一些不常见的 Linux),并且您的 Debian 或 RedHat 可执行文件都不能在它们上运行,或者无法以某种方式运行,那么设置该发行版的 VM 并构建一个可执行文件专门针对那种味道。

我过去曾采用过这种方法并且效果很好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为多个平台构建 Linux 二进制文件 的相关文章

随机推荐