目录
获取Release模式下的可执行文件
勾选Qt的Shadow build设置。
选择Release运行模式,运行。
会产生一个build-xxx-Release的目录。
在这个build-xxx-Release的目录下,有一个可执行文件。
打包的目录结构搭建
随便一个地方建一个目录,我的目录名是temp。
在temp目录下再建一个目录,这个目录的名字要跟可执行文件的名字一致,我的可执行文件名是JiaShiJianCe,将build-xxx-Release目录下的可执行文件拷贝到JiaShiJianCe目录下。
到这里,打包的目录结构就好了。
安装linuxdeployqt
linuxdeployqt用于拷贝可执行文件的依赖。
环境准备
安装git、g++、libgl1-mesa-dev。
sudo apt-get -y install git g++ libgl1-mesa-dev
下载linuxdeployqt
在下载的过程中,可能会出现连接不上的情况,但是问题不大,多运行几次即可。
git clone https://github.com/probonopd/linuxdeployqt.git
进入下载好的linuxdeployqt目录。
编译安装
qmake
make
sudo make install
复制快捷方式
让linuxdeployqt命令生效。
sudo mv bin/linuxdeployqt /usr/local/bin/
配置环境变量
vim .bashrc
在最后添加下面内容,Qt库的路径和unixODBC库的路径。
#add qt env
export PATH=/opt/Qt5.12.9/5.12.9/gcc_64/bin:$PATH
export LIB_PATH=/opt/Qt5.12.9/5.12.9/gcc_64/lib:$LIB_PATH
export PLUGIN_PATH=/opt/Qt5.12.9/5.12.9/gcc_64/plugins:$PLUGIN_PATH
export QML2_PATH=/opt/Qt5.12.9/5.12.9/gcc_64/qml:$QML2_PATH
export PATH=/usr/local/unixODBC/lib:$PATH
export LD_LIBRARY_PATH=/usr/local/unixODBC/lib/:$LD_LIBRARY_PATH
export LIB_PATH=/usr/local/unixODBC/lib:$LIB_PATH
使生效
source ~/.bashrc
查看版本
linuxdeployqt --version
说明安装成功。
安装unixODBC库
不安装的话,在拷贝依赖库进行打包时,会出现下面问题,正是缺少unixODBC库导致。
unixODBC库下载网址:
unixODBCMain pagehttp://www.unixodbc.org/
解压
tar -zxvf unixODBC-2.3.11.tar.gz
配置
cd unixODBC-2.3.11/
./configure --enable-gui=no --prefix=/usr/local/unixODBC
编译安装
make
sudo make install
重启系统
一定一定一定要重启系统,不然缺少unixODBC库问题依然是没有解决。
打包
linuxdeployqt JiaShiJianCe -verbose2
到这里,打包就完成了,整一个JiaShiJianCe目录拷贝到另一个Linux系统上,正常情况都是可以运行起来,特殊情况另行解决。
特殊情况例如:
因为我的工程使用了MySQL,在开发的系统上是存在MySQL驱动的,而另一个干净的Linux系统下,是没有MySQL驱动的,所以程序运行起来是存在问题的。
原因
缺库。
解决方法
将libmysqlclient.so.20文件拷贝到/usr/lib/x86_64-linux-gnu/下。
sudo cp libmysqlclient.so.20 /usr/lib/x86_64-linux-gnu/
打成deb包
打deb包目录构建
最终目录结构如下,按照下面目录结构,最终应用安装的位置就在/opt/下。我的可执行文件名是JiaShiJianCe,所以那个目录名也是JiaShiJianCe。
目录 | 作用 |
---|---|
output | 存放生成的deb包 |
source | 存放打包文件 |
DEBIAN | 存放deb包控制文件 |
opt | 存放应用目录 |
JiaShiJianCe | 存放可执行文件、依赖库、桌面快捷方式、图标等 |
拷贝依赖
将build-xxx-Release目录下的可执行文件拷贝到JiaShiJianCe目录下,利用linuxdeployqt进行拷贝依赖。
linuxdeployqt JiaShiJianCe -appimage
出现的错误不用管,是桌面文件的问题。到这里,依赖就全部拷贝完成。
桌面图标
修改default.desktop文件。
修改文件名,改为自己的应用名
mv default.desktop JiaShiJianCe.desktop
修改JiaShiJianCe.desktop文件内容。
vim JiaShiJianCe.desktop
修改为下面内容。
[Desktop Entry]
Type=Application
Name=驾驶检测
Exec=/opt/JiaShiJianCe/JiaShiJianCe
Icon=/opt/JiaShiJianCe/TuBiao.png
Comment=This is my test #说明信息
Terminal=false #是否允许在终端启动
关键字 | 参数 |
---|---|
Name | 快捷方式显示的文字 |
Exec | 安装好应用后,可执行文件(包含绝对路径) |
Icon | 安装好应用后,应用的图标(包含绝对路径) |
给快捷方式文件添加可执行文件。
chmod 777 JiaShiJianCe.desktop
TuBiao.png随便上网找,说明.txt自己写的说明文档,最终的JiaShiJianCe目录如下。
control文件
control文件主要描述软件包的名称(Package),版本(Version),Installed-Size(大小),Maintainer(打包人和联系方式)以及描述(Description)等,是deb包必须具备的描述性文件,以便于软件的安装管理和索引。
创建control文件
vim control
添加下面内容,根据自身情况填写。
Package: JiaShiJianCe
Version: 1.0.0
Section: utils
Priority: optional
Architecture: amd64
Depends:
Installed-Size: 40960000
Maintainer: 123@163.com
Description: xxx
关键字 | 含义 |
---|---|
Package | 包名,卸载需要 |
Version | 应用版本 |
Architecture | 架构 |
Maintainer | 维护人员联系方式,看着写 |
Description | 软件包描述 |
postinst文件
负责安装完成时的配置工作,软件安装完后,执行该Shell脚本,一般用来配置软件执行环境,必须以“#!/bin/sh”为首行。
创建postinst文件。
vim postinst
添加下面内容,路径根据自己的情况修改,根据自己的情况再额外添加其他指令。
#!/bin/sh
chmod 777 /opt/JiaShiJianCe/JiaShiJianCe.desktop
postrm文件
软件卸载后,执行该Shell脚本,一般作为清理收尾工作,必须以“#!/bin/sh”为首行。
创建postrm文件
vim postrm
添加下面内容,根据自己的情况再额外添加其他指令。
#!/bin/sh
给control、postinst、postrm给予可执行权限。
chmod 775 control postinst postrm
注意:一定不能给777的权限,否则在构建deb包时会报错。
构建deb包
dpkg -b . /home/cet/Qt/XiangMu/1/temp1/output/JiaShiJianCe_amd64_1.0.0.deb
最终的目录结构如下,到这里,deb包就构建完成。
deb包安装
sudo dpkg -i JiaShiJianCe_amd64_1.0.0.deb
在/opt/下就能看到安装的应用了。
创建桌面快捷方式,.desktop拷贝到桌面即可,在桌面双击图标便可运行程序。
cp JiaShiJianCe.desktop ~/桌面/
卸载应用
这个时候就需要包名了。
sudo apt-get remove JiaShiJianCe
貌似这个指令不太行,直接在/opt/下删除也行。
sudo rm -rf JiaShiJianCe