新版本的 g++ 与旧版本的 libstdc++
New version of g++ with an older version of libstdc++
我是运行 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)?
Is there a way to use g++ 7.1.0 and still use the standard library (both headers and libstdc++.so) from g++ 4.8.5 installed with CentOS?
不要那样做(libstdc++
来自 GCC 4.8 和 GCC 7 的 ABI 可能不同)。相反,请考虑静态链接 C++ 标准库(来自 GCC 7.1)(以及其他动态库,特别是 C 中的库,包括 libc.so
,而不是 C++)。
顺便说一句,你是怎么得到 g++-7.1
的?你可以考虑在你的 CentOS 7 上编译 GCC 7(从它的源代码)(或者得到它的一些打包版本),那么你将拥有正确的 libstdc++
阅读更多关于共享库的信息,例如阅读 Drepper 的论文 How To Write Shared Libraries 并了解有关传递给 ld
的 -rpath
选项的更多信息(通常使用 -Wl,-rpath
到 g++
)。
gcc4 和 gcc5 之间的 libstdc++ ABI changed,因此它不会起作用。如果您使用的是 gcc7,则应安装 libstdc++ 7。您可以同时安装两个版本
Developer Toolset 专为这种情况而设计,但目前为 GCC 版本 6:
它的 C++ 编译器的配置方式使其编译的程序动态链接到系统 libstdc++
,使用向后兼容的 ABI,并且只有新的 C++ 功能的库代码还没有系统库支持的是静态链接的。这提供了最大的兼容性,并允许编译的应用程序 运行 没有 DTS。
我是运行 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)?
Is there a way to use g++ 7.1.0 and still use the standard library (both headers and libstdc++.so) from g++ 4.8.5 installed with CentOS?
不要那样做(libstdc++
来自 GCC 4.8 和 GCC 7 的 ABI 可能不同)。相反,请考虑静态链接 C++ 标准库(来自 GCC 7.1)(以及其他动态库,特别是 C 中的库,包括 libc.so
,而不是 C++)。
顺便说一句,你是怎么得到 g++-7.1
的?你可以考虑在你的 CentOS 7 上编译 GCC 7(从它的源代码)(或者得到它的一些打包版本),那么你将拥有正确的 libstdc++
阅读更多关于共享库的信息,例如阅读 Drepper 的论文 How To Write Shared Libraries 并了解有关传递给 ld
的 -rpath
选项的更多信息(通常使用 -Wl,-rpath
到 g++
)。
gcc4 和 gcc5 之间的 libstdc++ ABI changed,因此它不会起作用。如果您使用的是 gcc7,则应安装 libstdc++ 7。您可以同时安装两个版本
Developer Toolset 专为这种情况而设计,但目前为 GCC 版本 6:
它的 C++ 编译器的配置方式使其编译的程序动态链接到系统 libstdc++
,使用向后兼容的 ABI,并且只有新的 C++ 功能的库代码还没有系统库支持的是静态链接的。这提供了最大的兼容性,并允许编译的应用程序 运行 没有 DTS。