在目标机上调试Qt程序,编译没问题,当运行程序时,程序闪退,并给出错误提示:
Cannot mix incompatible Qt library (version 0x40805) wiht this library (version0x40807)
Aborted (core dumped)
原因分析:
字面含义为:不能将不兼容的Qt库(版本0x40805)和(版本0x40807)进行混合使用;这说明当前系统中存在两个版本的Qt库,分别为485和487,程序运行时加载了不同版本的Qt库,导致运行错误。至于为什么会加载不同版本的qt库,原因在于当前环境变量的Qt库缺少程序运行所需的Qt库文件,此时程序会去其它环境目录以及系统目录中寻找对应的Qt库,并且找到了,但是版本不同。
对可执行程序使用ldd
命令,对其运行所需的库进行全面检查,查看Qt库是否存在不同版本;如果不存在可对自己的so库进行检查,如果还有插件也一并检查,就能查出问题所在了。
解决方法:
保证程序运行时加载同一版本的Qt库即可。
方法1: 将所缺少的Qt库(同一版本)拷贝至对应的环境变量文件夹中。
方法2:进入Qt的安装目录,并进入lib文件夹,将其下的库文件备份至新建文件qt中,这样程序运行时就会全部加载另一版本的Qt库。
例:
#cd /usr/local/Trolltech/Qt-4.8.7/lib
#mkdir qt
#mv *Qt* qt