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

RedHat5.8下编译GLIBC2.20报错及PyQt5依赖GLIBC2.20求助

解决RedHat 5.8下编译GLIBC 2.20及PyQt5依赖高版本GLIBC的问题

一、修复GLIBC 2.20编译时security_deny_unknown未定义的错误

你碰到的这个链接错误,根源是RedHat 5.8自带的SELinux库版本太低,缺少security_deny_unknown这个符号。最稳妥的解决思路是在编译GLIBC时避开SELinux相关的依赖,具体操作如下:

  1. 重新配置GLIBC编译参数
    进入GLIBC源码的编译目录(建议单独建一个build目录,不要在源码目录直接编译),执行配置命令时添加禁用SELinux和NSCD的参数:

    ../glibc-2.20/configure --prefix=/usr/local/glibc-2.20 --disable-selinux --disable-nscd
    

    参数说明:

    • --prefix=/usr/local/glibc-2.20:指定安装路径,绝对不能设为/usr或/lib,否则会覆盖系统默认GLIBC,直接导致系统崩溃
    • --disable-selinux:关闭SELinux相关功能,避开缺失的符号
    • --disable-nscd:如果上面的参数还无法解决问题,直接关闭NSCD(名称服务缓存守护进程)的编译,它不是GLIBC的核心组件,不影响基础功能
  2. 重新编译安装
    配置完成后,执行编译和安装命令:

    make -j$(nproc)
    make install
    

    $(nproc)会自动获取服务器CPU核心数,加速编译,也可以手动指定核心数,比如-j4。

二、让PyQt5调用新安装的GLIBC 2.20

编译完成后,不能替换系统默认GLIBC,需要通过环境变量指定动态链接库路径来让PyQt5程序使用新GLIBC:

  1. 临时生效(仅当前终端)
    运行helloworld.py前,先设置环境变量:

    export LD_LIBRARY_PATH=/usr/local/glibc-2.20/lib:$LD_LIBRARY_PATH
    python helloworld.py
    

    这样程序会优先加载新路径下的GLIBC库。

  2. 永久生效(针对当前用户)
    编辑用户目录下的.bashrc文件,添加以下内容:

    export LD_LIBRARY_PATH=/usr/local/glibc-2.20/lib:$LD_LIBRARY_PATH
    

    保存后执行source ~/.bashrc使配置立即生效。

  3. 注意事项

    • 不要将新GLIBC路径添加到系统级的/etc/ld.so.conf,否则会导致依赖旧GLIBC的系统服务崩溃
    • 如果运行程序时仍提示其他依赖缺失,可以用ldd $(which python)查看依赖库路径,确认缺失的库是否在新GLIBC路径中,必要时调整LD_LIBRARY_PATH

替代方案:用conda创建低依赖版本的PyQt5环境

如果编译GLIBC觉得繁琐,也可以尝试安装对GLIBC要求更低的PyQt5版本:

conda create -n pyqt5_compat python=3.6 pyqt=5.9
conda activate pyqt5_compat
python helloworld.py

PyQt5.9版本对GLIBC的兼容性更好,大概率能在你的RedHat 5.8系统上正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:48:16