帮我算一笔账。
我有一个用 C++ 编写的软件,它可以在尽可能多的 Linux 发行版上运行,我需要找出一个有效的策略。在这种情况下,我试图发送二进制文件而不是源代码(可能很高兴知道)。它已经是一个商业产品,我有知识产权问题阻止我开源产品,但也意味着我必须处理无数的 GPL 问题。
目前的推理路线是选择一个最小公分母并以此为基础构建一切。这有两个主要的含义,我认为会适得其反。
- 旧版本的 GCC 中的 C++ 支持缺少一些更现代的 C++ 功能。
- 最小的共同点是 Red Hat Enterprise Linux 4 (RHEL4)
我绝对不需要整个 C++11 功能集,但我想将 C++ 支持提升到 Visual C++ 2010 的支持。我正在仔细研究使用 Clang/libc++ 而不是 GCC/libstdc++ 的想法在可能的情况。
RHEL4 似乎没有广泛的跨平台支持来构建 C++ 应用程序,此外,我对 ABI 在不同版本的 linux 上的稳定性知之甚少,但我担心 RHEL4 麻烦多于价值。尝试基于少数几个发行版构建所有发行版并不是一个可行的策略。
我假设为不同的Linux发行版编译软件最好通过使用目标平台上的工具为目标平台编译软件来完成。我目前还假设如果您不接受这一点,您将在跨 Linux 平台上遇到巨大的可移植性问题。更不用说由于跨平台/发行版的 C++ ABI 不稳定性而可以链接或不能链接的许多库。
但我可能是错的,我想听听定期处理这个问题的人的意见。什么会起作用,为什么?或更重要的是,什么不起作用?