CentOS7安装devtoolset-10后如何将libstdc++-10设为默认C++标准库
CentOS 7 配置devtoolset-10的libstdc++为默认标准库方案
首先明确原因:devtoolset是红帽推出的SCL(软件集合)组件,设计上为了不破坏系统原有依赖,默认不会修改/usr/include、/usr/lib等系统级路径,你看到的/usr/include/c++下仅存在4.8.x版本目录是正常现象,devtoolset-10对应的头文件、库文件都存放在/opt/rh/devtoolset-10/root/目录下,激活环境后编译器会自动检索对应路径。
方案1:当前用户永久生效(无系统风险,优先推荐)
该方案仅影响当前登录用户,不会修改系统全局配置,避免干扰依赖旧版GCC的系统组件运行:
- 编辑当前用户的bash配置文件:
vim ~/.bashrc - 在文件末尾添加激活脚本:
source /opt/rh/devtoolset-10/enable - 保存退出后执行
source ~/.bashrc即可立即生效,后续当前用户所有新启动的shell会话都会默认加载devtoolset-10环境,编译C代码时会自动使用libstdc-10的头文件和库文件。
方案2:系统全局生效(所有用户默认使用,存在兼容性风险)
警告:CentOS 7系统大量基础组件依赖GCC 4.8.5版本的libstdc++,修改全局默认可能导致部分系统工具、第三方RPM包运行异常,请谨慎操作。
- 创建全局激活脚本:
vim /etc/profile.d/devtoolset-10.sh - 写入如下内容:
#!/bin/bash source /opt/rh/devtoolset-10/enable - 给脚本添加可执行权限:
chmod +x /etc/profile.d/devtoolset-10.sh - 执行
source /etc/profile.d/devtoolset-10.sh立即生效,后续所有用户登录系统都会默认加载devtoolset-10环境。
可选操作:手动添加头文件软链接
如果需要在未激活devtoolset环境的场景下也能检索到libstdc++-10的头文件,可以手动创建软链接到系统头文件目录:
ln -s /opt/rh/devtoolset-10/root/usr/include/c++/10 /usr/include/c++/10
注意:该操作仅添加头文件检索路径,程序运行时仍需要加载devtoolset-10提供的libstdc++.so.10动态库,否则会出现版本不兼容报错。
内容的提问来源于stack exchange,提问作者Eric Niebler
相关产品推荐
相关产品推荐

