Ubuntu22.04下如何安装含GLIBCXX_3.4.29的gcc-9.5.0?
问题解答
核心结论
不行,gcc 9.5.0的libstdc原生不支持GLIBCXX_3.4.29。GLIBCXX版本标记和gcc版本强绑定:GLIBCXX_3.4.29是gcc 10.1及以上版本才引入的,gcc 9.x系列的libstdc最高仅提供GLIBCXX_3.4.28,无法通过单独升级libstdc或glibc来实现(注:你之前编译glibc是方向错误,GLIBCXX属于libstdc,和glibc是两个完全独立的库)。
解决实际报错的方案
你遇到的问题是加载自定义gcc环境后,系统软件(如gnuplot)优先调用了自定义gcc的libstdc++,但该库版本满足不了系统软件的依赖。以下是几种可行的解决方法:
1. 临时指定系统libstdc++运行系统软件
运行gnuplot时,通过LD_PRELOAD强制加载系统自带的libstdc++:
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 gnuplot
如果需要长期使用,可在~/.bashrc中添加别名:
alias gnuplot='LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 gnuplot'
2. 修改module文件,避免全局覆盖系统库
调整你的gcc module配置,不要将自定义gcc的库路径放到LD_LIBRARY_PATH最前端,或者仅设置编译工具链变量,不全局替换系统库:
# 注释掉原module中可能存在的全局库路径设置 # prepend-path LD_LIBRARY_PATH /home/xxx/local/gcc/9.5.0/lib64 # 仅设置编译相关变量,确保自研软件编译时使用gcc9.5.0 setenv CC /home/xxx/local/gcc/9.5.0/bin/gcc setenv CXX /home/xxx/local/gcc/9.5.0/bin/g++ prepend-path PATH /home/xxx/local/gcc/9.5.0/bin
这样平时系统软件仍使用系统库,只有编译自研软件时才调用gcc9.5.0。
3. 重新编译gcc9.5.0时链接系统libstdc++(不推荐)
如果必须让自定义gcc环境兼容系统软件,可在编译gcc9.5.0时添加--with-system-libstdcxx参数,强制使用系统的libstdc++。但此方法可能导致自研软件编译出现兼容性问题,需要充分测试。
内容的提问来源于stack exchange,提问作者timolipk
相关产品推荐
相关产品推荐

