带有旧版libstdc ++的新版g ++

时间:2017-06-22 11:39:34

标签: c++ linux libstdc++

我正在运行带有g ++ 4.8.5的Linux CentOS 7.3。我想用g ++ 7.1.0编译一些C ++软件。但是用g ++ 7.1.0编译的C ++程序正在使用g ++ 7.1.0和libstdc ++附带的标准库中的头文件。所以它也带来了令人痛苦的东西。

有没有办法使用g ++ 7.1.0并仍然使用与CentOS一起安装的g ++ 4.8.5的标准库(头文件和libstdc ++。so)?

3 个答案:

答案 0 :(得分:3)

  

有没有办法使用g ++ 7.1.0并仍然使用与CentOS一起安装的g ++ 4.8.5的标准库(头文件和libstdc ++。so)?

不要这样做(GCC 4.8和GCC 7的libstdc++的ABI可能不同)。相反,可以考虑链接C ++标准库(来自GCC 7.1)静态(以及动态的其他库,特别是C中的那些库,包括libc.so,而不是C ++。)

顺便说一下,你是怎么得到g++-7.1的?你可以考虑在你的CentOS 7上编译GCC 7(来自它的源代码)(或者获得它的一些打包版本),然后你将拥有正确的libstdc++

详细了解共享库,例如阅读Drepper的论文How To Write Shared Libraries,详细了解传递给-rpath的{​​{1}}选项(通常使用ld-Wl,-rpath)。

答案 1 :(得分:3)

gcc4和gcc5之间的libstdc ++ ABI changed因此无法正常工作。如果您使用的是gcc7,则应安装libstdc ++ 7.您可以同时安装两个版本

答案 2 :(得分:1)

Developer Toolset专为此方案而设计,但目前在GCC第6版:

其C ++编译器的配置方式使得它编译的程序使用向后兼容的ABI动态链接到系统libstdc++,并且只有新的C ++功能的库代码尚未受到支持系统库是静态链接的。这提供了最大的兼容性,并允许编译的应用程序在没有DTS的情况下运行。