我正在运行带有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)?
答案 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的情况下运行。