centos下qt程序发布过程及问题解决方法(could not find or load the Qt platform plugin "xcb" in ")

一,qt程序发布过程

     1. 生成release版本的可执行文件。

     2. 新建一个文件夹,将release版本的可执行文件复制到文件夹中,只需要复制可执行文件即可,其他的不用复制。

     3. 在可执行文件所在的目录中打开终端,执行一个脚本文件,该脚本文件需要提前写好,执行脚本文件成功后,程序运行时所依赖的库都被复制到该文件夹中。脚本文件内容如下,

#!/bin/sh 
exe="TestTool" #你需要发布的程序名称,与可执行文件的名称要保持一致
des="/root/test1" #创建文件夹的位置,在root目录下新建一个test1文件夹
deplist=$(ldd $exe | awk  '{if (match($3,"/")){ printf("%s "),$3 } }') 
cp $deplist $des

执行该脚本成功后,程序所依赖的库都被拷贝到test1文件夹下,所有的库与可执行文件都在同一目录下。执行完该步骤后,程序可能还不能在其他未安装qt的机器上运行。因为当你在终端中执行程序时,会提示你缺少一些库。这种情形可能分两种情况,一是确实缺少某些库,二是提示缺少的库已经复制过来了,还是提示找不到库。如果是后者的话,你需要考虑这些共享库的路径问题了。假如共享库是绝对路径的话,那么即便你把所有的库都复制过来,仍然会提示找不到库,因此共享库的路径必须是相对路径。

如下图红圈中所示,前面有$ORIGIN:标志表示相对路径,可以将可执行文件与库放到任意目录下执行。通过在终端中执行

 

readelf -d TestTool命令来查看可执行文件TestTool的信息。如果发现共享库的路径不是这种形式,目前我所知道的只能是更换qt安装包了,这里使用的是Qt5.6.0版本的。应该还有其他的方法来设置,如果有知道的网友还请留言。qt安装包下载链接如下:
http://download.qt.io/archive/qt/

 

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 

此时共享库库的路径是相对路径了,在终端中执行ldd TestTool命令(TestTool为可执行文件名),所有的库都可以找到,执行./TestTool,又发现如下的问题,
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
关于这个问题,网上的方法有很多,但说的不是很清楚,也没有解决我遇到的问题,最终找到了一种方法,顺利的解决了这个问题,参考了下面的这篇博客。
https://blog.csdn.net/sinat_26106275/article/details/82778951?utm_source=blogxgwz2
二,解决could not find or load the Qt platform plugin "xcb" in  问题过程

 

     在终端中设置环境变量export QT_DEBUG_PLUGINS=1,执行可执行文件后,可以看到程序的加载过程,并打印错误信息。
如红线标注的所示,在执行checking操作时找不到platforms文件,导致后续的操作被中断。
在/opt/Qt5.6.0/5.6/gcc_64/plugins将platforms文件复制到test1文件夹下,与可执行文件TestTool在同一目录下。前面路径是qt安装路径,每个人的安装路径可能不一样。
执行./TestTool,出现如下的错误。

 

 

   提示找不到libQt5DBus.so.5,在/opt/Qt5.6.0/5.6/gcc_64/lib路径中,找到libQt5DBus.so.5,查看它的属性信息,发现它是一个符号链接文件,链接目标是libQt5DBus.so.5.6.0,把这两个文件同时复制到platforms文件夹下,再次执行./TestTool,根据提示信息,缺少什么库文件,就将对应的库文件复制过来。
     采用这个方法解决了我所遇到的所有问题,最后在将程序文件拷贝到其他机器上时提示符号链接文件无法拷贝,当然在本地机器上拷贝是没有问题的。解决的办法是先将文件打包压缩,然后拷贝到目标机器上,解压缩之后程序可以正常运行。
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值