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

news2024/11/17 16:51:46

目录

获取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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/192435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python虚拟环境大总结(virtualenv pipenv)

文章目录1 virtualenv1.1 安装1.2 测试安装是否成功1.3 主要命令1.4 virtualenvwrapper1.4.1 创建虚拟环境1.4.2 列举所有虚拟环境1.4.3 激活虚拟环境1.4.4 取消激活虚拟环境1.4.5 删除虚拟环境1.4.6 创建指定版本的虚拟环境2 pipenv2.1 安装2.2 创建虚拟环境2.3 进入虚拟环境2…

游戏之外,元宇宙也在寻求与更多领域进行融合

在大众对元宇宙的构想中,“游戏”是优先级最高的落地场景之一。《头号玩家》、《赛博朋克2077》等作品中,“游戏”也多次成为元宇宙的主要载体,描画出人们对于这一前沿风口的想象。 2022年以来,监管侧陆续传来元宇宙产业发展的利…

python算法加密 pyarmor与docker

如觉得博主文章写的不错或对你有所帮助的话,还望大家多多支持呀!关注、点赞、收藏、评论。 目录一、 基本语法 加密 Python 脚本二、运行加密脚本三、pyarmor&docker3.1 Dockerfile3.2 requirements.txt3.3 加密函数lock_by_pyarmor.py3.4 主函数myp…

元宵节营销活动策划,轻松拿下用户

热闹的春节刚过,又将迎来团圆美满的元宵节🏮。我们今天就来讲讲,关于节日营销的小巧思! 【产品游戏】 在每一个关于节日的营销里,将游戏作为切入点与产品相结合,往往可以获得意想不到的效果。对于场景单一…

DynaSLAM-6 DynaSLAM论文解读

目录 1.论文摘要解读 1.1 原论文内容 1.2 个人理解 2.论文discusses related work部分 2.1 原论文内容 3.论文SYSTEM DESCRIPTION部分 3.1 使用Mask R-CNN对潜在的动态内容进行分割 3.2 低成本追踪 3.3 使用Mask R-CNN和多视角几何对动态内容进行分割 3.4 跟踪线程…

分享会上狂吹MySQL的4大索引结构红黑树、二叉树B+Tree,没想到~~~~

索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足 特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构 上实现高…

品优购网页制作

目录 favicon图标 TDK三大标签SEO优化 title网站标题 description网站说明 keywords关键字 首页制作 快捷导航模块 左浮动 右浮动 header头部模块制作 1.logo模块 2.search模块 3.热词模块 4.购物车模块 子绝父绝 nav导航模块 1.nav左边导航位置 2.上方导航位置 …

PCB覆铜很“上头”?一文帮你搞定实操要点和规范

1、覆铜覆盖焊盘时,要完全覆盖,shape 和焊盘不能形成锐角的夹角。2、尽量用覆铜替代粗线。当使用粗线时,过孔通常为非通常走线过孔,增大过孔的孔径和焊盘。修改后:3、尽量用覆铜替换覆铜走线的模式,后者常常…

11.深度优先搜索

一、算法内容 1.简介 深度优先搜索DFS(Depth First Search)按照深度优先的方式进行搜索,可以理解为“一条路走到黑”地穷举所有可行的方案,并不断尝试,直到找到一种情况满足问题问题的要求。那么这个方案就是一个问题…

shell 循环学习练习

目录 一,嵌套循环实现9*9乘法表 二,判定一个成绩: 三,循环创建用户:用户名为user01-user20 一,嵌套循环实现9*9乘法表 (for和while都可以) 选做:格式对齐,以及使用单层循环完成9*9乘…

精细管理——CRM销售漏斗管理

CRM销售漏斗涵盖了从接触客户到谈判、成单、回款的整个销售过程。一个典型的销售漏斗是由一个特定时间段里,例如一年或者一个季度或者一个月这个时间范畴之内,一系列有可能转化成订单的潜在销售机会所组成。在CRM客户管理系统中,销售漏斗管理…

Unity-TCP-网络聊天功能(四): 消息粘包、心跳机制保活(心跳包)、断线重连

8. 粘包Bug、心跳机制保活(心跳包)、断线重连粘包bug1:下线后,如果发送多条消息,在客户端上线时,一瞬间接收到,效果如同粘包,需要拆包。举例,连续发送三条160长度消息,可能实际显示2…

java常用类: System类直接常用方法

java常用类型: Ineteger等包装类 String类,StringBuffer类和StringBuilder类 Math类及常用方法 System类及常用方法 Arrays类及常用方法 BigInteger类和BigDecimal类及常用方法 日期类Date类,Calender类和LocalDateTime类 文章目录System简介System.exit(0) 退出Sys…

蓝桥杯重点(C/C++)(随时更新,更新时间:2023.2.2)

点关注不迷路,欢迎推荐给更多人,大约两天更新一次,建议点赞收藏加关注 本次更新内容:1.STL部分详细讲述,放到一篇新的文章中 2. 部分细节优化 目录 1 技巧 1.1 取消同步(节约时间,甚至能多…

Shield UI for JavaScript 1.7.44 Crack

Shield UI for JavaScript Shield UI JavaScript 框架提供具有响应式设计的 JavaScript HTML5 组件,这些组件经过优化以获得最佳性能。 Shield UI 在 70 多种小部件类型中提供了最快和高度可定制的网格和图表控件。每个单独的控件都由行业领先的 24/7 支持包提供支持…

以莫罗湾为例,利用高精度地形高程模型应对海岸环境变化

Morro Bay是位于加州 San Luis Obispo附近的浅海河口区,存在大量野生动物,也是人们户外活动的好去处。但是沉积变化和鳗草(大叶藻)的大量消失对河口景观产生了不利影响。为了更好地认识环境改变的路径并提取修复对策,M…

2023年山东最新建筑八大员(资料员)考试试题题库及答案

百分百题库提供建筑八大员(资料员)考试试题、建筑八大员(资料员)考试预测题、建筑八大员(资料员)考试真题、建筑八大员(资料员)证考试题库等,提供在线做题刷题,在线模拟考…

Vue实战第3章:主页设计之顶部导航栏

主页设计之顶部导航栏 前言 本篇在讲什么 本篇文章主要来制作一个导航栏,具体效果就按照下图来处理吧 本篇适合什么 适合初学Vue的小白 想了解建站的同学 本篇需要什么 对Html语法有简单认知 对CSS语法有简单认知 对Vue有简单认知 依赖VS Code编辑器 本…

【redis6】第十三章(主从复制)

是什么 主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 能干嘛 读写分离,性能扩展 容灾快速恢复 怎么玩 拷贝多个redis.conf文件include(写绝对路径) 开启daemonize yes Pi…

连接mysql5.7错误1045,重新设置root用户密码,已经springboot连接配置

错误: ERROR 1045 (28000): Access denied for user ‘root’‘localhost’ (using password: NO) 原因是: 是因为数据库中用户密码的问题。所以我们可以跳过数据权限验证,重新设置一下 一、修改my.ini配置文件 停止mysql服务 方法&#xff…