起因:
由于工作原因,需要离线部署软件到不同的系统下面,所以选择了市面上比较成熟的QT。
在Win 7上面进行打包,在其余Win 7/10的电脑上运行正常。后续需求系统使用CentOS 8。在Linux下打包无问题,但是在其他Linux系统下运行结果不一。
问题描述:
在银河麒麟V10下进行Qt工程的打包,打包正常。打包的程序在银河麒麟V10、Ubuntu 20.04、Debian11上也运行正常,但是在CentOS 8上面提示错误:version 'GLIBC_2.29' not found。如下图所示。
通过ldd命令查看文件所依赖的共享库列表,发现上述错误。
注:当前的系统版本为CentOS Linux Release 8.5.2111。
分析:
GLIBC的版本不兼容导致,CentOS由于稳定性的原因,GLIBC的版本过低。所以决定下载新版的GLIBC。
附2.29版本的下载地址:http://ftp.gnu.org/gnu/glibc/glibc-2.29.tar.gz
其余版本也可到上一层目录查找。
其实最后发现仅仅与GCC版本有关。无需更新GLIBC。
解决方案:
将下载的压缩包导入,解压。输入的命令如下:
tar -zxvf glibc-2.29.tar.gz
cd glibc-2.29
mkdir build
cd build/
../configure --prefix=/usr/local --disable-sanity-checks
但是,运行到最后一步的时候,又出现了错误。
通过gcc --version,发现GCC版本8.5。只能下载一个新版本导入。
附GCC各版本的下载地址:Index of /pub/gcc/releases
建议使用下面的语句安装各种依赖,会提示缺少信息。
sudo rpm -ivh *.rpm
后续其实会发现需要更多的依赖。此处不一一列举,我手动更新到GCC11.4.1。下面列出所下载的rpm。有需要可通过链接免费下载。
https://wwk.lanzoue.com/b05l3pf5a 密码:95q7
可见当前版本的GCC产生冲突,最后显示的版本还是旧版。所以最后执行命令时,需要强制替换旧文件,添加--force即可解决。
sudo rpm -ivh *.rpm --force
安装完成后,gcc也安装完成了,可查看当前GCC版本11.4.1.
注: /sbin/ldconfig: /lib64/ld-linux-x86-64.so.2 is not a symbolic link暂未解决。
重新使用ldd观察依赖。发现正常,Qt打包的程序也能正常运行。
完结撒花!!!如有错误方便指出,谢谢。
参考链接,感谢作者:
Centos 8安装gcc的方法_centos8 gcc-CSDN博客
Ubuntu18.04升级GLIBC_2.29,解决ImportError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29‘-CSDN博客