旧版发行版上的二进制兼容性(使用C ++ 11)

时间:2013-11-21 20:31:26

标签: c++ linux ubuntu gcc c++11

我正在使用GCC在Ubuntu 13上编译C ++应用程序。我希望能够在我的代码中使用C ++ 11功能,但同时仍然能够生成我的用户可以在其上运行的二进制文件旧版本的Ubuntu。

如果我使用最新版本的GCC在Ubuntu 13上编译,我的二进制文件将无法在Ubuntu 12上运行,因为glibc不是向前兼容的: (How compatible are different versions of glibc?

  • 我有什么选择?

  • 这是否可以在不要求我的用户跳过大规模篮球的情况下实现?

  • 如果没有,我的用户必须做些什么才能运行二进制文件(即他们可以在较旧版本的Ubuntu上安装较新的glibc)吗?

注意:我不想考虑静态链接glibc,因为:

  1. 我读过这是一个非常糟糕的主意
  2. 许可问题
  3. 交叉分发兼容性问题
  4. 目前我的应用程序不使用任何C ++ 11功能,并且我使用旧版本的GCC编译旧版本的Ubuntu以避免此问题。但令我感到难过的是,我无法使用最新最好的语言功能:(

3 个答案:

答案 0 :(得分:1)

您可以尝试使用 Boost Libraries ,它具有与C ++ 11完全相同的功能,并且比C ++ 11更“复古兼容”:它可以轻松地在旧版本的Ubuntu的。

否则,最好的选择可能是要求Ubuntu 12.04的用户将GCC从4.6升级到4.7或更近: http://www.swiftsoftwaregroup.com/upgrade-gcc-4-7-ubuntu-12-04/

答案 1 :(得分:0)

您问“我如何使用旧系统上没有的代码”。

答案当然是“在项目中包含代码”。

如果你仔细考虑一下你所问的内容,你会发现无论如何,你需要libstdc ++中c ++ 11函数的代码。因此,如果他们不在ubuntu 12上,你必须添加它们。因此,您必须将其静态链接。这是确保它在任意ubuntu12系统上运行的唯一方法。

嗯,你可以做一个花哨的安装,但最后,它只是你的应用程序“动态链接”到libstdc ++,所以它也可能是静态链接,因为没有其他程序将要寻找它在ubuntu12上

答案 2 :(得分:0)

通常,只有使用相同的编译器并且(!)编译器的版本匹配时,c ++库才是兼容的(尽管你可能很幸运)。除了编写C代码之外,在这个意义上没有办法可移植。