Linux下解决发布Qt程序报错:it could not find or load the Qt platform plugin “xcb” in “”

简述

用Qt5.8版本在ubuntu16.04版本下编写Qt应用程序,生成release版本并打包,到另一台无Qt环境的linux系统中运行。
网上通常是按以下几个步骤进行:
1、生成release程序。
2、拷贝release程序到一个新文件夹,执行一个脚本文件。脚本文件的作用是:ldd 程序名,并拷贝程序依赖的库到这个新文件夹。
3、编写一个和程序同名的sh文件,以此作为启动程序。不直接用release程序启动的好处是可以无须配置环境变量,而把配置环境变量过程写在sh脚本文件中(当然也可以配置环境变量后运行release程序的方式启动程序)。
4、拷贝platforms文件夹到这个新文件夹。
5、拷贝整个新文件夹到新linux系统,发布完成。
作者在第5步后会提示failed to start because it could not find or load the Qt platform plugin “xcb” in “”的错误,由于对linux文件系统的不熟悉,研究了一天才解决。

解决

经过上网查询,这个问题主要是platforms文件夹中libqxcb.so的依赖库没有拷贝导致的。可是如何拷贝依赖库,是个大问题!
在程序当前目录下输入ldd platforms/libqxcb.so后,提示/usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5 “not found”,去原linux电脑中,确实找到了libQt5XcbQpa.so.5文件,但把这个文件拷贝到release所在目录下并没有效果!
研究了一天,才明白libQt5XcbQpa.so.5文件是链接文件!使用ls -al可以找到链接文件对应的源文件!把源文件拷贝到release目录下,再新建一个相同名字的链接文件,才算完成了这个libQt5XcbQpa.so.5资源文件的打包!!
新建链接文件的命令:ln -s $PWD/libQt5XcbQpa.so.5.8.0 libQt5XcbQpa.so.5。
同样的,还有一个libQt5DBus.so.5的链接文件,也要通过拷贝真实文件(libQt5DBus.so.5.8.0)到打包目录,然后通过ln -s $PWD/libQt5DBus.so.5.8.0 libQt5DBus.so.5命令建立同名的链接文件。
“xcb” in “”的问题完美解决,程序正常启动运行了。

结尾

这个问题对于刚转linux编程的作者确实头大,网上最多是一句话把libQt5XcbQpa.so.5文件拷贝即可,没有如此详细的解释对于linux编程生手确实头疼。
列一下Linux中文件颜色所代表的属性:
绿色文件:可执行程序
红色文件:压缩文件
蓝色文件:目录
白色文件:普通文件
浅蓝色文件:链接文件。即用ln命令建立的文件!
红色闪烁文件:链接有问题的链接文件!
黄色文件:设备文件
灰色文件:其它文件

猜你喜欢

转载自blog.csdn.net/lusanshui/article/details/84988017