天天看点

Qt程序报错:could not find or load the Qt platform plugin “xcb“ in ““.

Qt开发,在开发机上生成了可执行文件之后,连同其相关的共享库,一起拷贝至目标机:

Qt程序报错:could not find or load the Qt platform plugin “xcb“ in ““.

双击没反应。用终端运行提示:

This application failed to start because it could not find or load the Qt platform plugin "xcb" in "". Reinstalling the application may fix this problem. 已放弃(核心已转储)

Qt程序报错:could not find or load the Qt platform plugin “xcb“ in ““.

 这个问题折腾了很久都没有解决。尤其是花了很多时间去查询xcb,platform相关的内容,回头看其实是思路跑偏了。

今天,无意中闪过一个思路:对比法。

在开发机上,新建一个最简单的项目,就一个窗体和一个按钮,取名Test1, 构建,运行。

然后把可执行文件单独拷贝至目标机和本项目的可执行程序同一目录,双击,可以正常运行。

奇怪,为什么新建的程序可以运行而原来的程序报错?

尝试用ldd分别进行查看两者的库文件依赖:

1. ldd Test1

Qt程序报错:could not find or load the Qt platform plugin “xcb“ in ““.

2. ldd ArtilleryAimLNX

Qt程序报错:could not find or load the Qt platform plugin “xcb“ in ““.

对比可知:

正常运行的Test1, 直接引用了/usr/lib/arrch64-linux-gun目录下的库。

无法运行的ArtilleryAimLNX, 大部分都引用了同目录中的库,也就是 ../桌面/aim_exec_599/./这个目录。其中的/./显得非常奇怪:

Qt程序报错:could not find or load the Qt platform plugin “xcb“ in ““.

 看上去这个奇怪的路径符号可能是导致程序不能运行的原因。

那么能否像Test1那样,直接引用/usr/lib/arrch64-linux-gun目录下的库呢?

尝试把可执行文件同目录的库文件(.so*)全部删掉,然后双击,居然可以运行了!

再用ldd查看引用:

Qt程序报错:could not find or load the Qt platform plugin “xcb“ in ““.

继续阅读