繁体   English   中英

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

[英]Binary compatibility (using C++11) on older distro versions

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

如果我在具有最新版本GCC的Ubuntu 13上进行编译,则由于glibc不向前兼容,因此我的二进制文件将无法在Ubuntu 12上运行:( glibc的不同版本兼容程度如何?

  • 我有什么选择?

  • 甚至不需要我的用户跳过繁重的循环,这是否有可能?

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

注意:由于以下原因,我不想考虑静态链接glibc:

  1. 我读到这是一个非常糟糕的主意
  2. 许可问题
  3. 跨发行版兼容性问题

当前,我的应用程序不使用任何C ++ 11功能,并且为了避免此问题,我在较旧版本的Ubuntu和GCC上进行了编译。 但这让我很难过无法使用最新和最强大的语言功能:(

您可以尝试使用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/

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

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

如果您考虑了自己的问题,就会意识到,无论如何,您都需要libstdc ++中c ++ 11函数的代码。 因此,如果它们不在ubuntu 12上,则必须添加它们。 因此,您必须使其静态链接。 这是确保它可以在任意ubuntu12系统上运行的唯一方法。

好了,您可以进行精美的安装,但是最后,它只是您的应用程序“动态链接”到libstdc ++,所以它也可能是静态链接的,因为没有其他程序会在ubuntu12上寻找它。

通常,仅当使用相同的编译器并且(!)编译器的版本匹配时,c ++库才兼容(不过,您可能很幸运)。 从这种意义上讲,除了编写C代码之外,没有其他方法可以移植。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM