image

Linux下Qt程序打包成Deb包


writerlIcht                      emaillIcht.gzl@gmail.com                 date:  2020.8.3

 

 

22

         Qt开发软件通常最后阶段要打包发布,Linux下Deb包是用户安装很方便的方式,以程序名为QCommander,以此为例,中间也因为一下小问题卡住了一周左右,主要是没找到解决的关键点。如打包后双击程序启动加厚找不到ROS的环境变量导致程序闪退的问题,无意之间看到一个帖子在设置qtcreator.desktop文件时的Exec绝对路径之前加上了bash -i -c语句,加载了终端的环境变量,试了试便成功了,以下对整个过程进行回顾记录。

 

 

1、安装linuxdeployqt,两种方式:

a)直接下载下图中的linuxdeployqt-7-x86_64.AppImage文件

github地址:https://github.com/probonopd/linuxdeployqt/releases

image

可将直接将.AppImage文件下载完成后,将其改名为linuxdeployqt,并chmod+x,复制到/usr/local/bin/下,然后命令行输入linuxdeployqt -version,若输出版本信息表示安装成功。

如果是ubuntu18以上的系统版本可能会出现报错:

image

b)此时应采用源码编译方式:

github地址:https://github.com/probonopd/Linuxdeployqt.git

下载后编译之前将tools/Linuxdeployqt/main.cpp中的下述代码注释掉:

然后就可以使用cmake和make进行编译,生成好的可执行程序是tools/Linuxdeployqt/Linuxdeployqt,同样将其拷贝到/usr/local/bin/目录,使用linuxdeployqt -version命令查看是否安装成功。

 

 

2、安装patchelf工具:

 

 

3、打包应用程序

a)在qt中将程序编译成Release版本:

注意在程序.pro文件中添加如下代码:

image

 

编译通过后确保release中成的可执行文件类型为:

image

任意位置创建一个文件夹,名称为应用程序的名称(这里为QCommander),然后将release版本中的可执行文件(单个文件就行了)复制到此文件夹下:

image

在当前QCommander目录下打开终端,使用linuxdeployqt对其进行打包,命令如下:

本例为:linuxdeployqt QCommander -appimage

过程出现的如下报错信息不予处理,完成后效果:

image

此时目录下自动生成了一系列文件:

image

此时可双击或者在命令行./APPname可执行程序,验证能不能运行。

 

接下来拷贝进一个图标文件作为该程序的图标,本例为Tank128.png,并将default.desktop文件改名为QCommander.desktop:

image

 

 

4、生成deb包

在任意位置新建一个文件夹,名为QCommanderdeb,或任意名字,进入该文件夹新建两个文件夹:source、output :

image

进入source文件夹新建文件: DEBIAN、opt,将QCommander文件夹复制到opt目录下:

image

打开QCommander.desktop文件,修改内容:

在DEBIAN目录下新建三个文件: control、postinst、postrm

control文件中的内容:

含义: Package:包名。 Version:应用版本。 Architecture:架构,我这里是amd64。 Maintainer:维护人员联系方式,看着办。 Description:软件包描述。 其他的,这里没用到,就不写了,自己百度吧。

 

postinst中的内容(安装时在菜单里生成该应用程序的图标):

postrm中的内容(卸载时移除菜单中该应用程序的图标):

 

 

5、构建deb包

进入source文件夹下,在output文件夹中生成deb包:

打包结果,双击即可安装:

image