新版本的 g++ 与旧版本的 libstdc++

New version of g++ with an older version of libstdc++

本文关键字:版本 libstdc++ g++ 新版本      更新时间:2023-10-16

我运行的是 Linux CentOS 7.3,它附带 g++ 4.8.5。我想使用 g++ 7.1.0 来编译一些C++软件。但是用 g++ 7.1.0 编译的C++程序使用的是 g++ 7.1.0 附带的标准库中的标头,以及它也附带的 libstdc++.so 让事情变得非常痛苦。

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

有没有办法使用 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 的论文如何编写共享库,并了解有关传递给ld-rpath选项的更多信息(通常使用 -Wl,-rpathg++(。

libstdc++ ABI 在 gcc4 和 gcc5 之间发生了变化,所以这不起作用。如果你使用的是 gcc7,你应该安装 libstdc++ 7。您可以同时安装两个版本

开发人员工具集专为此方案而设计,但当前为 GCC 版本 6:

  • https://www.softwarecollections.org/en/scls/rhscl/devtoolset-6/

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