Linux打包发布qt应用程序

10 篇文章 0 订阅


Qt应用程序在windows下打包相对比较简单;Linux下使用Qt进行开发的程序,如果想要在其他搭载Linux系统的主机上运行则需要将要发布的Qt程序依赖的一些动态链接库一起打包,主要方法:Linux系统下可以手写一个脚本文件,充分利用ldd命令进行打包。

一.环境介绍

操作系统环境: ubuntu18.04 64位

QT版本: 5.12.4

二.编译文件

  1. 在Qt中使用release的方式编译出可执行文件;
  2. 新建一个文件夹,将可执行文件拷贝进去备用。

三.使用脚本文件获取依赖库文件

1. 编写脚本文件

使用命令进入可执行文件的目录下,然后在这个空目录下新建一个文件(pack.sh),文件内容如下:

#!/bin/sh  
exe="myApp"#需发布的程序名称
des="xxxxx"#步骤一中新建目录的完整路径
deplist=$(ldd $exe | awk  '{if (match($3,"/")){ printf("%s "),$3 } }')  
cp $deplist $des

2. 赋予脚本文件权限并执行

chmod 777 pack.sh
./pack.sh

可执行文件依赖的链接库将会拷贝到所在的目录

3. 拷贝所依赖的qt平台的库文件

为了发布过程不出现各种BUG,找不到库、找不到平台等等一系列问题,现在使用一个笨办法。
将QT使用的编译器目录下的所有库拷贝到上述所建文件夹下。
查找本机QT安装路径,我的安装路径为: /opt/Qt5.14.2/5.14.2/gcc_64/
将QT使用的编译器目录下的plugins文件夹拷贝到上述文件夹目录下(主要依赖platform文件夹所包含的库文件,可以实验只用platform库文件程序是否可以正常运行)。这样得到的文件可能会比较多,然后在保证程序正常运行的情况下,可以尝试删除无用的库文件。

注:直接ldd命令和可能遇到缺少库问题

直接使用linux的ldd命令也可以查找可执行文件的依赖库,ldd命令和脚本功能一样,写成脚本是为了方便,查找之后就拷贝过来。使用ldd命令查找到依赖库需要自己一个个去当前系统中查找,命令示例:

ldd myapp

可能会遇到提示无法加载xcb插件等类似问题,一般这种问题就是缺少了动态库的依赖环境

libQt5XcbQpa.so.5
libQt5Dbus.so.5

这是两个链接,需要使用命令来查看Qt不同版本对应的这两个文件的实体文件(直接拷贝链接文件无效),进入Qt安装环境中下的lib库,一般是/Qt5.xx.x/xx.x/gcc_xx/lib这路径,进入后找到并复制到打包文件夹中。
即将原来的链接文件删除,并把文件复制进来并修改为原来的链接文件名。

四.编写执行脚本

1. 编写执行脚本

使用命令进入可执行文件的目录下,然后新在这个空目录下新建一个文件(myapp.sh),文件内容如下:

#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,`  
dirname=`dirname $0`  
tmp="${dirname#?}"  
if [ "${dirname%$tmp}" != "/" ]; then  
dirname=$PWD/$dirname  
fi  
LD_LIBRARY_PATH=$dirname  
echo $LD_LIBRARY_PATH
export PATH=$LD_LIBRARY_PATH:$PATH
echo $PATH
$dirname/$appname "$@"

此脚本目的是为了设置环境变量,告诉执行程序库所在的路径,所以可以写一个shell脚本方便程序的部署,直接使用脚本启动程序即可。其中,带echo的两行脚本只是为了能在终端看到路径的名称,为了调试方便。
注:需要注意的是,最后让程序运行的是脚本,所以我们直接运行myapp.sh这个脚本让程序运行成功,此文件名必须和执行程序同名,且在同一目录下。

2. 赋予执行脚本文件权限并执行

chmod 777 myapp.sh
./myapp.sh
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值