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,根据提示信息,缺少什么库文件,就将对应的库文件复制过来。
     采用这个方法解决了我所遇到的所有问题,最后在将程序文件拷贝到其他机器上时提示符号链接文件无法拷贝,当然在本地机器上拷贝是没有问题的。解决的办法是先将文件打包压缩,然后拷贝到目标机器上,解压缩之后程序可以正常运行。
参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

云域的空间

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值