3

我已经devtoolset-10在 CentOS 7 上安装了这个包并运行了/opt/rh/devtoolset-10/enable脚本,所以现在当我这样做时:

g++ --version

我明白了:

g++ (GCC) 10.2.1 20210130 (Red Hat 10.2.1-11)

伟大的。麻烦的是,下面的标题/usr/include/c++仍然指向 ye olde libstdc++-4.8.5。也就是说,如果我ls在 中做/usr/include/c++,我看到的只是:

bash-4.2$ ls /usr/include/c++
4.8.2  4.8.5

“启用”libstdc++-10成为默认系统 C++ 标准库的魔法咒语是什么?

4

3 回答 3

2

开发工具集-10

每个 g++ 都有自己的头文件。/usr/include/c++/4.8*仅适用于 4.8.5。

devtoolset-10:g++ 版本 10 正在使用头文件/opt/rh/devtoolset-10/root/usr/include/c++/10

“启用” libstdc++-10

没有共享库“libstdc++-10”。有/opt/rh/devtoolset-10/root/usr/lib/gcc/x86_64-redhat-linux/10/{ libstdc++.a, libstdc++.so },其中 libstdc++.so 是一个 ~200B 的文本文件。

于 2021-09-08T09:57:45.893 回答
1

我猜用户应该向 gcc 查询包含路径。在我的 CentOS 上 /usr/include/c++ 不是符号链接,也不应该指向任何地方,但可以使用 update-alternatives 解决这个问题(不过,我只为编译器本身这样做)。可能会被更新覆盖,但这些在 CentOS 上发生的频率不够高。

于 2021-09-08T07:21:38.507 回答
1

“启用”libstdc++-10成为默认系统 C++ 标准库的魔法咒语是什么?

Developer Toolset 使用混合链接模型。这意味着它不自带libstdc++.so.6,而是尽可能使用系统版本。缺少的部分是静态链接的。这是通过Knud Larsen 提到的链接器脚本实现的。

于 2021-09-11T20:55:18.833 回答