[教程][Ubuntu][Qt]将Qt程序打包成deb文件,发布、安装及使用

在Ubuntu上用qt软件编写的程序完成后,如果需要在另一台纯净的Linux系统上运行,则可以通过打包成deb文件的形式进行移植,经测试可用。

0 准备前说明

修改程序.pro文件,将程序运行时要加载的数据文件放置在运行文件目录下。(例如要加载人脸检测的文件)

1QMAKE_POST_LINK += "cp -u $${_PRO_FILE_PWD_}/facefile/shape_predictor_68_face_landmarks.dat $${OUT_PWD};" \ 2 3

这样在Release编译时,会将该文件自动复制到Release目录下,为后面的打包步骤省了很多麻烦。

1 环境

系统环境:Ubuntu16.04
Qt版本:5.9

2 步骤

2.1 Qt下Release模式编译工程文件(文件名为Test)

2.2 整理文件

2.2.1 创建如下基本目录结构

1demo 2 project 3 DEBIAN // 存放control文件,用于记录安装包相关信息的配置文件 4 usr 5 local 6 lib //存放程序所需的链接库 7 Test // 存放程序文件(建议与程序同名) 8 share 9 applications // 存放 *.desktop 文件 10 icons // 存放软件的图标 *.png 11 12

2.2.2 将编译好的Test文件及需要加载的数据文件放在Test目录下

2.2.3 定位到Test目录下,并创建脚本文件Test.sh

1cd ~/demo/project/usr/local/Test //具体目录改成自己创建的目录 2touch Test.sh //建议不使用sudo命令 3 4

双击Test.sh文件,写入如下内容:

1#!/bin/sh 2appname=`basename $0 | sed s,\.sh$,,` 3dirname=`dirname $0` 4tmp="${dirname#?}" 5if [ "${dirname%$tmp}" != "/" ]; then 6dirname=$PWD/$dirname 7fi 8 9LD_LIBRARY_PATH=$dirname 10export LD_LIBRARY_PATH 11$dirname/$appname "$@" 12 13

保存后并输入如下命令:

1sudo chmod +x Test.sh 2sudo ./Test.sh 3 4

则会弹出自己程序的界面;

2.3 提取并整理依赖库(建议在非中文路径下)

2.3.1 定位到Test目录下,并创建脚本文件copylib.sh文件

1touch copylib.sh 2 3

双击Test.sh文件,写入如下内容:

1#!/bin/sh 2 3if [ ! -d "./dep" ]; then 4 mkdir ./dep 5else : then 6 rm -rf ./dep 7 mkdir ./dep 8fi 9 10ldd ./Test |cut -d ">" -f 2|grep lib|cut -d "(" -f 1|xargs tar -chvf ./dep/Test.tar 11echo "ok" 12 13

保存后并输入如下命令:

1sudo chmod +x copyllib.sh 2./copylib.sh Test 3 4

该目录下会得到一个deb文件夹

2.3.2 整理依赖库

1、将deb文件夹的子文件夹里的依赖库文件复制粘贴到demo/project/usr/local/lib目录下;
2、根据自己程序需要(一般程序均会用到),在Test目录下创建platforms文件夹,并将Qt5.9.4/5.9.4/gcc_64/plugins/platforms/libqxcb.so(按照自己安装的Qt安装目录及版本寻找)复制到该文件夹下;
3、根据自己程序情况,将其他所用到的依赖库添加到具体目录下;

2.4 编写配置文件

2.4.1 在DEBIAN路径下创建control文件

1cd ~/demo/project/DEBIAN 2touch control 3 4

双击control文件,添加如下内容

1package: Test 2version: 1.0.0 3architecture: amd64 4maintainer: Test 5description: Test Project 6 7------- 以下为注释部分,执行时,请将从这一行开始的所有内容删除 -------- 8package 表示安装包的名字 9version 表示次安装包的版本 10architecture 当前系统的架构的信息 11maintainer 此安装包的维护者 12description 此安装包的描述 13 14

2.4.2 在applications目录下创建Test.desktop文件

1cd ~/demo/project/usr/share/applications 2touch Test.desktop 3 4

双击该文件并添加内容

1[Desktop Entry] 2Encoding=UTF-8 3Name=Test 4Exec=/usr/local/Test/Test.sh 5Icon=/usr/share/icons/Test.png 6Comment="released_on_2020_08_05" 7Terminal=false 8Type=Application 9Categories=Development 10 11------- 以下为注释部分,执行时,请将从这一行开始的所有内容删除 -------- 12Exec 目标文件(完整路径) 13Icon 图标文件(完整路径)末尾不能有空格,否则将会导致无法加载图标 14Categories可以取以下值,表示程序的启动快捷方式放在哪个菜单下: 15 应用菜单Application; 16 Network放在互联网(Internet); 17 办公 Office; 18 图形 Graphics; 19 声音和视频 AudioVideo; 20 系统工具 System; 21 编程 Development; 22 附件 Utility; 23 影音 AudioVideo; 24 游戏 Game; 25 首选项 Settings(GNOME;GTK;Settings;HardwareSettings;); 26 系统管理 System;Settings; 27 28
1sudo chmod +x Test.desktop 2 3

2.4.3 将一张.png图片重命名为Test.png并复制到icons目录下

2.5 本文最终目录如下

1demo 2 project 3 DEBIAN 4 control 5 usr 6 local 7 lib 8 libs....... 9 SeerTools 10 platforms 11 libqxcb.so 12 share 13 applications 14 SeerTools.desktop 15 icons 16 SeerTools.png 17 18

2.6 打包制作安装包

在demo文件夹下输入如下指令
deb包正确的命名规则program-name_version_architeture.deb。所有的值必须与它们在control文件里对应的语句相同

1dpkg -b project/ Test_1.0.0_amd64.deb 2 3

一段时间便可得到deb文件

2.7 安装测试

在另一台linux系统下,将deb文件拷贝到某目录下,命令定位到该目录下,并输入命令进行安装

1sudo dpkg -i Test_1.0.0_amd64.deb 2 3

(或者直接双击该文件进行安装(未验证))

2.8 运行测试

找到Test.desktop文件,路径在/usr/share/applications/Test.desktop
或者在桌面左上角点击图标,在应用里找到运行文件

2.9 卸载测试(未验证)

1sudo dpkg -r Test 2 3

3 参考

在Ubuntu上打包Qt工程,并实现其安装和使用。
https://blog.csdn.net/qq_26971331/article/details/87939098
ubuntu下打包制作deb安装包
https://blog.csdn.net/yangbingzhou/article/details/33318625



写于关雎



新浪微博:https://weibo.com/tianzhejia
CSDN博客:https://blog.csdn.net/qq_35605018
博客网站:http://www.zhijiadeboke.xyz
GitHub:https://github.com/ZhijiaTian
QQ邮箱:2461824656@qq.com
126邮箱:tianzhejia@126.com
Outlook邮箱:tianzhejia@outlook.com

以上均可与本人取得联系,欢迎探讨。^ v ^

代码交流 2021