【Qt】11.Linux下,Qt程序打包

目录

获取Release模式下的可执行文件

打包的目录结构搭建

安装linuxdeployqt

环境准备

下载linuxdeployqt

编译安装

复制快捷方式

配置环境变量

使生效

查看版本

安装unixODBC库

解压

配置

编译安装

重启系统

打包

原因

解决方法

打成deb包

打deb包目录构建

拷贝依赖

桌面图标

control文件

postinst文件

postrm文件

构建deb包

deb包安装

卸载应用

获取Release模式下的可执行文件

勾选Qt的Shadow build设置。

【Qt】11.Linux下,Qt程序打包_第1张图片

 选择Release运行模式,运行。

【Qt】11.Linux下,Qt程序打包_第2张图片

 会产生一个build-xxx-Release的目录。

【Qt】11.Linux下,Qt程序打包_第3张图片

 在这个build-xxx-Release的目录下,有一个可执行文件。

【Qt】11.Linux下,Qt程序打包_第4张图片

打包的目录结构搭建

随便一个地方建一个目录,我的目录名是temp。

【Qt】11.Linux下,Qt程序打包_第5张图片

       在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目录。

【Qt】11.Linux下,Qt程序打包_第6张图片

编译安装

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

【Qt】11.Linux下,Qt程序打包_第7张图片

使生效

source ~/.bashrc

查看版本

linuxdeployqt --version

 说明安装成功。

安装unixODBC库

不安装的话,在拷贝依赖库进行打包时,会出现下面问题,正是缺少unixODBC库导致。

【Qt】11.Linux下,Qt程序打包_第8张图片

 unixODBC库下载网址:

unixODBCMain pagehttp://www.unixodbc.org/

【Qt】11.Linux下,Qt程序打包_第9张图片

解压

tar -zxvf unixODBC-2.3.11.tar.gz 

 

配置

cd unixODBC-2.3.11/

【Qt】11.Linux下,Qt程序打包_第10张图片

./configure --enable-gui=no --prefix=/usr/local/unixODBC

编译安装

make
sudo make install

重启系统

一定一定一定要重启系统,不然缺少unixODBC库问题依然是没有解决。

打包

linuxdeployqt JiaShiJianCe -verbose2

【Qt】11.Linux下,Qt程序打包_第11张图片

       到这里,打包就完成了,整一个JiaShiJianCe目录拷贝到另一个Linux系统上,正常情况都是可以运行起来,特殊情况另行解决。

       特殊情况例如:

【Qt】11.Linux下,Qt程序打包_第12张图片

         因为我的工程使用了MySQL,在开发的系统上是存在MySQL驱动的,而另一个干净的Linux系统下,是没有MySQL驱动的,所以程序运行起来是存在问题的。

原因

缺库。

【Qt】11.Linux下,Qt程序打包_第13张图片

解决方法

libmysqlclient.so.20文件拷贝到/usr/lib/x86_64-linux-gnu/下。

sudo cp libmysqlclient.so.20 /usr/lib/x86_64-linux-gnu/

 【Qt】11.Linux下,Qt程序打包_第14张图片

打成deb包

打deb包目录构建

       最终目录结构如下,按照下面目录结构,最终应用安装的位置就在/opt/下。我的可执行文件名是JiaShiJianCe,所以那个目录名也是JiaShiJianCe。

【Qt】11.Linux下,Qt程序打包_第15张图片

目录 作用
output 存放生成的deb包
source 存放打包文件
DEBIAN 存放deb包控制文件
opt 存放应用目录
JiaShiJianCe 存放可执行文件、依赖库、桌面快捷方式、图标等

拷贝依赖

      将build-xxx-Release目录下的可执行文件拷贝到JiaShiJianCe目录下,利用linuxdeployqt进行拷贝依赖。  

linuxdeployqt JiaShiJianCe -appimage

【Qt】11.Linux下,Qt程序打包_第16张图片

 出现的错误不用管,是桌面文件的问题。到这里,依赖就全部拷贝完成。

桌面图标

修改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                   #是否允许在终端启动

【Qt】11.Linux下,Qt程序打包_第17张图片

关键字 参数
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: [email protected]
Description: xxx
关键字 含义
Package 包名,卸载需要
Version 应用版本
Architecture 架构
Maintainer 维护人员联系方式,看着写
Description 软件包描述

【Qt】11.Linux下,Qt程序打包_第18张图片

postinst文件

       负责安装完成时的配置工作,软件安装完后,执行该Shell脚本,一般用来配置软件执行环境,必须以“#!/bin/sh”为首行。

       创建postinst文件。

vim postinst

 添加下面内容,路径根据自己的情况修改,根据自己的情况再额外添加其他指令。

#!/bin/sh
chmod 777 /opt/JiaShiJianCe/JiaShiJianCe.desktop

【Qt】11.Linux下,Qt程序打包_第19张图片

postrm文件

       软件卸载后,执行该Shell脚本,一般作为清理收尾工作,必须以“#!/bin/sh”为首行。

      创建postrm文件

vim postrm

 

 添加下面内容,根据自己的情况再额外添加其他指令。

#!/bin/sh

【Qt】11.Linux下,Qt程序打包_第20张图片

 给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包就构建完成。

【Qt】11.Linux下,Qt程序打包_第21张图片

deb包安装

sudo dpkg -i JiaShiJianCe_amd64_1.0.0.deb

【Qt】11.Linux下,Qt程序打包_第22张图片

 在/opt/下就能看到安装的应用了。

 创建桌面快捷方式,.desktop拷贝到桌面即可,在桌面双击图标便可运行程序。

cp JiaShiJianCe.desktop ~/桌面/

 

卸载应用

这个时候就需要包名了。

sudo apt-get remove JiaShiJianCe

 貌似这个指令不太行,直接在/opt/下删除也行。

sudo rm -rf JiaShiJianCe

 

你可能感兴趣的:(Qt,qt,开发语言,c++)