我使用GCC在Ubuntu 13上编译C++应用程序。我希望能够在我的代码中使用C++ 11功能,但同时仍然能够生成一个二进制文件,我的用户可以在旧版本的Ubuntu上运行。旧版发行版本上的二进制兼容性(使用C++ 11)
如果我编译在Ubuntu 13 GCC我二进制文件的最新版本,将无法在Ubuntu上运行12 glibc的,因为不向前兼容: (How compatible are different versions of glibc?)
我有哪些选择?
这甚至可能没有要求我的用户跳过大规模的箍?
如果不是,我的用户必须做些什么才能运行二进制文件(即他们可以在较旧版本的Ubuntu上安装更新的glibc)?
注:我不不想考虑静态链接glibc的,因为:
- 我读过,这是一个非常糟糕的主意
- 许可问题
- 交叉分布兼容性问题
目前我的应用程序没有使用任何C++ 11功能,并且我在较早版本的Ubuntu wi上编译一个旧版本的GCC来避免这个问题。但它使我伤心不能够使用最新和最伟大的语言特点:(
链接静态。许可问题将以任何方式存在,而且是静态编译的程序 - 因为它包含了所需的所有内容,而不是依赖最终用户的库 - 可以在基本上使用相同CPU的任何Linux系统上运行。 – cHao
只需在较旧的操作系统上使用较新的gcc编译即可。从源代码或手动添加的存储库安装gcc。您可能需要静态链接libstdC++,或者使用您的程序分发libstdC++的副本(我认为这是合法的,如果您还发布libstdC++源代码; IANAL,请咨询您的法律部门)。 –
@cHao,我读过很多关于静态链接glibc的SO问题,许多人似乎表明这是一个坏主意。例如(http://stackoverflow.com/a/11654451/966782)。另外,关于静态链接的LGPL让我感到恐慌。我想避免它... – pqvst