linux下qt工程打包方案

        近期在进行项目国产化开发时遇到了qt项目打包相关若干问题,在此记录先关 问题和解决方案,以便后续相关问题解决。

        如果打包过程中不考虑qt依赖,只将程序相关依赖库打包并安装在其他PC上。 此时如果编译时依赖的qt版本高于系统自身所有的qt库版本,就会存在qt版本冲 突的问题导致无法运行。若系统自身带有的qt库版本高于编译时依赖版本,可能 能够正常运行,也可能会存在冲突。所以打包时应将所依赖的qt动态库一并打 包。 将qt库一并打包后,安装在其他PC并运行,此时会存在如图1所示的问题,程 序依旧无法运行。根据报错提示可知此时是因为找不到相关插件所以无法运行, 将qt的platform一并拷贝后再次运行程序。此时可以看到程序还是无法运行,如 图2所示。但报错发生变化,根据报错大概可以知道程序无法正常加载xcb插件。 但内容较少,无法了解真正原因。我们使用export QT_DEBUG_PLUGINS=1来打开q t的debug信息,此时相关信息会打印至终端。再次运行程序。

图1

图2

图3

        此时可以看到详细的报错信息,可以看到加载libQt5XcbQpa库是系统自带的版 本,其依赖的qt库为高版本,而我们程序已经加载了我们编译时使用的5.9.6的 版本的QtCore库,所以导致加载xcb库时失败。我们已经打包了相关qt库至同级 文件,且指定程序运行时依赖库目录为同级目录,为什么还会加载系统中的qt 库?进入platforms目录,使用readeld命令查看linqxcb.so发现运行时依赖库目 录为后退两级的lib文件夹(如图4),因为我们没有这个文件夹,所以其查找依 赖时找到了系统路径下的库。

图4

        此时可以看到详细的报错信息,可以看到加载libQt5XcbQpa库是系统自带的版 本,其依赖的qt库为高版本,而我们程序已经加载了我们编译时使用的5.9.6的 版本的QtCore库,所以导致加载xcb库时失败。我们已经打包了相关qt库至同级 文件,且指定程序运行时依赖库目录为同级目录,为什么还会加载系统中的qt 库?进入platforms目录,使用readeld命令查看linqxcb.so发现运行时依赖库目 录为后退两级的lib文件夹(如图4),因为我们没有这个文件夹,所以其查找依 赖时找到了系统路径下的库。

图5

        第二中解决方案则是修改打包目录层级,将所有的依赖库放入lib文件夹,并保持 和platforms的相对关系,从而使得xcb库能够正常加载,此时程序也可正常运 行。此时最好使用qt.conf指定好plugins路径,qt.conf示例和目录层级示意如下图 所示。

图6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值