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相关的依赖,具体操作如下:
重新配置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的核心组件,不影响基础功能
重新编译安装
配置完成后,执行编译和安装命令:make -j$(nproc) make install$(nproc)会自动获取服务器CPU核心数,加速编译,也可以手动指定核心数,比如-j4。
二、让PyQt5调用新安装的GLIBC 2.20
编译完成后,不能替换系统默认GLIBC,需要通过环境变量指定动态链接库路径来让PyQt5程序使用新GLIBC:
临时生效(仅当前终端)
运行helloworld.py前,先设置环境变量:export LD_LIBRARY_PATH=/usr/local/glibc-2.20/lib:$LD_LIBRARY_PATH python helloworld.py这样程序会优先加载新路径下的GLIBC库。
永久生效(针对当前用户)
编辑用户目录下的.bashrc文件,添加以下内容:export LD_LIBRARY_PATH=/usr/local/glibc-2.20/lib:$LD_LIBRARY_PATH保存后执行
source ~/.bashrc使配置立即生效。注意事项
- 不要将新GLIBC路径添加到系统级的
/etc/ld.so.conf,否则会导致依赖旧GLIBC的系统服务崩溃 - 如果运行程序时仍提示其他依赖缺失,可以用
ldd $(which python)查看依赖库路径,确认缺失的库是否在新GLIBC路径中,必要时调整LD_LIBRARY_PATH
- 不要将新GLIBC路径添加到系统级的
替代方案:用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
相关产品推荐
相关产品推荐

