【发布时间】:2013-11-21 20:31:25
【问题描述】:
我正在使用 GCC 在 Ubuntu 13 上编译 C++ 应用程序。我希望能够在我的代码中使用 C++11 功能,但同时仍然能够生成我的用户可以运行的二进制文件旧版本的 Ubuntu。
如果我在 Ubuntu 13 上使用最新版本的 GCC 进行编译,我的二进制文件将无法在 Ubuntu 12 上运行,因为 glibc 不向前兼容: (How compatible are different versions of glibc?)
我有哪些选择?
这甚至可能不需要我的用户跳过大量的障碍吗?
如果不能,我的用户必须做什么才能运行二进制文件(即他们可以在旧版本的 Ubuntu 上安装新的 glibc)吗?
注意:我不想考虑静态链接 glibc,因为:
- 我听说这是一个非常糟糕的主意
- 许可问题
- 跨发行版兼容性问题
目前我的应用程序不使用任何 C++11 功能,我在旧版本的 Ubuntu 上使用旧版本的 GCC 进行编译以避免这个问题。但是不能使用最新最好的语言功能让我很伤心:(
【问题讨论】:
-
静态链接。无论哪种方式,许可问题都会存在,静态编译的程序——因为它包含它需要的一切,而不是依赖于最终用户的库——基本上可以在任何使用相同 CPU 的 Linux 系统上运行。
-
只需在较旧的操作系统上使用较新的 gcc 进行编译。从源代码或手动添加的存储库安装 gcc。不过,您可能必须静态链接 libstdc++,或者在您的程序中分发 libstdc++ 的副本(我认为这是合法的,如果您还提供 libstdc++ 源;IANAL,请咨询您的法律部门)。
-
@cHao,我已经阅读了很多关于静态链接 glibc 的 SO 问题,并且许多似乎表明这是一个坏主意。例如 (stackoverflow.com/a/11654451/966782)。此外,关于静态链接的 LGPL 让我感到害怕。我想避免它...
标签: c++ linux ubuntu gcc c++11