You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS 6.9编译CMake 3.5.0时make install提示GLIBCXX版本缺失求助

问题原因分析

这个报错的核心原因是sudo执行命令时会重置环境变量,导致你普通用户下配置的LD_LIBRARY_PATH并没有被sudo继承。虽然你在普通用户环境中把/usr/local/lib64放在了/usr/lib64前面,但sudo默认会清理大部分自定义环境变量,使用一套更安全的系统级环境配置——这时候系统还是会优先去/usr/lib64找旧版本的libstdc++.so.6,而这个旧库缺少CMake 3.5.0需要的GLIBCXX_3.4.15和GLIBCXX_3.4.21版本,所以触发了报错。

解决方案

下面提供几种可行的解决办法,按推荐程度排序:

1. 临时指定sudo的环境变量(最安全快捷)

直接在sudo命令中显式传递LD_LIBRARY_PATH,让make install过程使用你指定的高版本库:

sudo LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH make install

2. 配置sudo保留LD_LIBRARY_PATH(长期生效)

如果需要频繁用sudo调用依赖该库的程序,可以修改sudo配置让它保留LD_LIBRARY_PATH:

  • 用visudo编辑/etc/sudoers(必须用visudo,避免语法错误导致sudo失效)
  • 添加一行配置:
    Defaults env_keep += "LD_LIBRARY_PATH"
    
  • 保存退出后,后续sudo命令就会继承当前用户的LD_LIBRARY_PATH了

3. 替换系统默认的libstdc++.so.6链接(需谨慎)

把系统默认的libstdc++.so.6软链接指向你安装的高版本库:

  • 先备份原链接:
    sudo mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.old
    
  • 创建新的软链接:
    sudo ln -s /usr/local/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6
    

注意:这种方式可能影响系统中依赖旧版本libstdc++的程序(比如部分系统自带工具),操作前请确认风险。

4. 编译时指定链接库(从源头解决)

如果重新编译CMake,可以在cmake配置阶段就指定链接到高版本的libstdc++:

cmake -DCMAKE_EXE_LINKER_FLAGS="-L/usr/local/lib64 -lstdc++" ../cmake-3.5.0

然后再执行make和sudo make install,这样编译出来的CMake程序会直接绑定到你指定的库,后续执行时就不会依赖系统默认库了。

内容的提问来源于stack exchange,提问作者Chan Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:40:21