在 CentOS-7 中更新 /usr/include/c++

问题描述 投票:0回答:4

我已经在 CentOS 7 上安装了

devtoolset-10
软件包并运行
/opt/rh/devtoolset-10/enable
脚本,所以现在当我这样做时:

g++ --version

我明白了:

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

太棒了。问题是,

/usr/include/c++
下的标题仍然指向旧的
libstdc++-4.8.5
。也就是说,如果我在
ls
中执行
/usr/include/c++
,我看到的只是:

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

“启用”

libstdc++-10
成为默认系统 C++ stdlib 的魔法是什么?

centos7 libstdc++ devtoolset
4个回答
3
投票

开发工具集-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 的文本文件。


1
投票

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


1
投票

“启用”

libstdc++-10
成为默认系统 C++ stdlib 的魔法是什么?

开发者工具集采用混合联动模型。这意味着它不自带

libstdc++.so.6
,而是尽可能使用系统版本。缺失的部分是静态链接的。这是通过 Knud Larsen 提到的链接描述文件实现的。


0
投票

如果您想使用 Centos7 上最新的 C++ 编译器的标头进行编译:

  1. 删除构建目录
  2. 导出您选择的编译器
    export CXX=g++

感谢来自 github 的评论:

© www.soinside.com 2019 - 2024. All rights reserved.