yum/dnf报错GLIBCXX_3.4.26缺失问题解决

 admin   2026-06-23 10:47   9 人阅读  0 条评论
Traceback (most recent call last):
  File "/usr/bin/yum", line 61, in <module>
    from dnf.cli import main
  File "/usr/lib/python3.9/site-packages/dnf/__init__.py", line 30, in <module>
    import dnf.base
  File "/usr/lib/python3.9/site-packages/dnf/base.py", line 29, in <module>
    import libdnf.transaction
  File "/usr/lib64/python3.9/site-packages/libdnf/__init__.py", line 8, in <module>
    from . import error
  File "/usr/lib64/python3.9/site-packages/libdnf/error.py", line 13, in <module>
    from . import _error
ImportError: /opt/openGauss/install/om/script/gspylib/clib/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by /usr/lib64/libdnf.so.2)

报错原因分析

yum/dnf 执行时优先加载了 openGauss 自带的 libstdc++.so.6,这个库版本过低,缺少 GLIBCXX_3.4.26 符号,系统自带的高版本标准库被覆盖,导致 dnf 初始化失败。
 
核心冲突:LD_LIBRARY_PATH 环境变量里包含 /opt/openGauss/install/om/script/gspylib/clib/,优先加载了数据库自带旧 C++ 标准库。

方案 1:临时修复(立刻能用 yum,临时生效)

1. 清空冲突的 LD_LIBRARY_PATH,临时执行 yum

bash
 
运行
 
 
 
LD_LIBRARY_PATH="" yum list
 
这条命令会临时屏蔽 openGauss 的库路径,yum/dnf 正常调用系统自带 libstdc++.so.6

2. 验证系统库是否支持 GLIBCXX_3.4.26

bash
 
运行
 
 
 
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
 
正常系统库会输出包含 GLIBCXX_3.4.26,证明系统库没问题,只是被 opengauss 的库覆盖。

方案 2:永久修复(推荐,根治问题)

步骤 1:定位环境变量配置文件

opengauss 安装时会在 /etc/profile~/.bashrc/opt/openGauss/.../env 写入 LD_LIBRARY_PATH。
 
查看哪些文件配置了该路径:
bash
 
运行
 
 
 
grep -r "/opt/openGauss/install/om/script/gspylib/clib" /etc/profile ~/.bashrc /etc/profile.d/
 

步骤 2:修改环境变量,把系统库放前面,或仅数据库用户生效

两种修改思路二选一:

方式 A:全局配置调整(所有用户)

找到类似这行:
bash
 
运行
 
 
 
export LD_LIBRARY_PATH=/opt/openGauss/install/om/script/gspylib/clib:$LD_LIBRARY_PATH
 
改成系统库优先
bash
 
运行
 
 
 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/openGauss/install/om/script/gspylib/clib
 
把 opengauss 路径放到末尾,系统原生库优先加载。

方式 B:仅 opengauss 数据库用户加载(更干净)

不要在 /etc/profile 全局配置,只在 omm 用户的 .bashrc 里配置,root/yum 不受影响。

步骤 3:重载环境变量

bash
 
运行
 
 
 
source /etc/profile
# 或退出重新登录服务器
 

步骤 4:验证 yum 恢复正常

bash
 
运行
 
 
 
yum clean all
yum makecache
 

方案 3:如果不能改环境变量(生产数据库不能动配置)

执行 yum 时封装别名,永久屏蔽冲突库:
bash
 
运行
 
 
 
echo "alias yum='LD_LIBRARY_PATH=\"\" yum'" >> /etc/bashrc
source /etc/bashrc
 
之后直接敲 yum 就会自动清空 LD_LIBRARY_PATH,不会报错。

补充说明

  1. 不要替换系统 /usr/lib64/libstdc++.so.6,容易系统崩溃;
  2. openGauss 旧版自带的 libstdc++ 版本偏低,只给数据库进程用即可,不能全局前置;
  3. 若切换到 omm 用户执行 gs_om、gsctl 等数据库命令,环境变量保持原样不影响数据库运行。
本文地址:https://liuchunjie.top/?id=828
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!
NEXT:已经是最新一篇了

评论已关闭!