目录
获取Release模式下的可执行文件
打包的目录结构搭建
安装linuxdeployqt
环境准备
下载linuxdeployqt
编译安装
复制快捷方式
配置环境变量
使生效
查看版本
安装unixODBC库
解压
配置
编译安装
重启系统
打包
原因
解决方法
打成deb包
打deb包目录构建
拷贝依赖
桌面图标
control文件
postinst文件
postrm文件
构建deb包
deb包安装
卸载应用
获取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