[英]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:
当前,我的应用程序不使用任何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.