第十五课、Windows 下打包发布 Qt 应用程序

功能描述:讲解了 Windows 下打包发布 Qt 应用程序的三种方法,并对比优缺点

一、利用 windepolyqt 工具打包发布

Qt 提供了一个 windeployqt 工具来自动创建可部署的文件夹。

打包发布流程:

1. 新建一个文件夹,将编译后的可执行程序拷贝到该文件夹中,以 QSshDemo.exe 应用程序为例,新建一个 QSsh-exe 文件夹,将 release 文件夹下的 QSshDemo.exe 文件拷贝到 QSsh-exe 文件夹下;

2. 查看本应用程序是由哪个编译器编译,去 Qt 安装目录相应编译器名称目录下的 bin 文件夹下寻找 windeployqt.exe 文件,如:路径为 xxx/Qt5.10.0/5.10.0/mingw53_32/bin, windeployqt.exe 文件拷贝到应用程序的同级目录下。QSshDemo.exe 由 Qt 5.10.0 的 MinGW 编译器编译,所以到 xxx(Qt 安装目录根目录)/Qt5.10.0/5.10.0/mingw53_32/bin 目录下,将 windeployqt.exe 文件复制粘到 QSshDemo.exe 的同级目录下;

3. 在搜索框中输入 “cmd” 回车,或者在“开始”菜单打开“命令提示符”,通过 cd 指令切换到应用程序文件夹下,如切换到 QSsh-exe 文件夹下;

 4. 执行 windeployqt 打包指令格式为:windeployqt.exe +空格+应用程序名称.exe

命令格式:windeployqt.exe 应用程序名称.exe
windeployqt.exe QSshDemo.exe

5. 如果应用程序仅依赖 Qt 自身动态库,则到此结束,双击应用程序即可运行;如果应用程序还依赖其它第三方库,则需要手动将第三方库拷贝到此文件夹下,注意:此处的第三方库必须和应用程序是同一种编译器编译。QSshDemo.exe 还依赖 QSsh 动态库,所以手动将这个动态库拷贝到QSsh-exe 文件夹下。

6. 到此,应用程序打包发布完成,为了减小应用程序发布文件夹的大小,建议删除 windeployqt.exe文件,双击 QSshDemo.exe 即可运行程序。

7. 此文件包含了应用程序所需的所有文件,将此文件夹提供给用户,用户可放到系统中任何位置,双击应用程序即可运行;也可通过选中该应用程序,右键菜单选择“发送到” -> “桌面快捷方式”,双击桌面快捷方式亦可运行。

优点:操作简单,一个指令搞定所有依赖文件

缺点:并不是所有文件都是该应用程序所必需的,发布打包文件会浪费一些存储空间

二、逐个拷贝应用程序依赖库

顾名思义,此方法是应用程序缺什么依赖库就拷贝对应的依赖库,直到程序能成功运行。

打包发布流程:

1. 新建一个文件夹,将编译后的可执行程序拷贝到该文件夹中,以 QSshDemo.exe 应用程序为例,新建一个 QSsh-exe 文件夹,将 release 文件夹下的 QSshDemo.exe 文件拷贝到 QSsh-exe 文件夹下;

2. 双击运行 QSshDemo.exe 应用程序,查看是否成功运行,如果不能成功运行,查看缺少什么依赖库

3. 将缺少的依赖库依次复制粘贴到应用程序的同级目录下,以 QSshDemo.exe 应用程序为例,将 Qssh.dll 复制粘贴到 QSsh-exe 文件夹下;

4. 重复第 2 步和第 3 步的操作,直到应用程序成功运行

 

 

5. 依次将 Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll、libgcc_s_dw2-1.dll、Qt5Network.dll、libstdc++-6.dll、libwinpthread-1.dll 拷贝到 QSsh-exe 文件夹下,QSshDemo.exe 即可成功运行。

 

优点:发布打包文件仅包含必需依赖库,体积较小

缺点:逐个拷贝依赖库,操作相对麻烦

 

、静态发布

将 Qt 的所有库重新编译,全部编译为静态库,然后用静态编译的 Qt 库来链接应用程序,这样生成的应用程序就可以直接运行,而不需要 .dll 文件的支持。不过这样生成的 exe 文件会很大,而且静态编译缺乏灵活性,也不能部署插件。

因此,静态发布方式了解即可,不推荐使用!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“之江数据安全治理论坛”暨《浙江省汽车数据处理活动规定(专家建议稿)》研讨会顺利召开

研讨会主题 8月10日,“之江数据安全治理论坛”暨《浙江省汽车数据处理活动规定(专家建议稿)》研讨会在浙江大学计算机创新技术研究院举办。 本次研讨会的主题聚焦于“智能网联汽车的数据安全与数据合规”,邀请行业主管部门和数据…

JS加密的域名锁定功能,JShaman支持泛域名

JShaman的域名锁定功能,支持泛域名 JShaman的JS代码混淆加密中,有一项“域名锁定”功能。使用此功能后,代码运行时会检测浏览器地址中的域名信息,如是非指定域名,则不运行,以此防止自己网站的JS代码被复制…

openGauss学习笔记-46 openGauss 高级数据管理-子查询

文章目录 openGauss学习笔记-46 openGauss 高级数据管理-子查询46.1 SELECT语句中的子查询使用46.2 INSERT语句中的子查询使用46.3 UPDATE语句中的子查询使用46.4 DELETE语句中的子查询使用 openGauss学习笔记-46 openGauss 高级数据管理-子查询 子查询或称为内部查询&#xf…

【广州华锐视点】VR线上教学资源平台提供定制化虚拟现实学习内容

虚拟现实(VR)技术的出现为我们提供了一种全新的在线教学方式。由广州华锐视点开发的VR线上教学资源平台,作为一个综合性的学习工具,正在教育领域迅速发展,并被越来越多的教育机构和学生所接受。那么,VR线上…

Redis缓存问题(穿透, 击穿, 雪崩, 污染, 一致性)

目录 1.什么是Redis缓存问题? 2.缓存穿透 3.缓存击穿 4.缓存雪崩 5.缓存污染(或满了) 5.1 最大缓存设置多大 5.2 缓存淘汰策略 6.数据库和缓存一致性 6.1 4种相关模式 6.2 方案:队列重试机制 6.3 方案:异步更新缓…

图数据库_Neo4j学习cypher语言_使用CQL_构建明星关系图谱_导入明星数据_导入明星关系数据_创建明星关系---Neo4j图数据库工作笔记0009

首先找到明星数据 可以看到有一个sheet1,是,记录了所有的关系的数据 然后比如我们搜索一个撒贝宁,可以看到撒贝宁的数据 然后这个是构建的CQL语句 首先我们先去启动服务 neo4j console 然后我们再来看一下以前导入的,可以看到导入很简单, 就是上面有CQL 看一下节点的属性

【Linux命令行与Shell脚本编程】第二十章 sed进阶

Linux命令行与Shell脚本编程 第二十章 sed进阶 文章目录 Linux命令行与Shell脚本编程十.sed进阶10.1.多行命令(nNDP)10.1.1.next命令10.1.1.1.单行next命令n10.1.1.2.合并文本行N 10.1.2.多行删除命令D10.1.3.多行打印命令P 10.2.保留空间(hHgGx)10.3.排除命令(!)10.4.改变执行…

使用本地电脑搭建可以远程访问的SFTP服务器

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd 服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2. 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3. 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#x…

使用 OpenTelemetry 构建可观测性 04 - 收集器

在之前的博文中,我们讨论了如何使用 SDK 和链路追踪生产者来导出进程中的遥测数据。尽管有多种类型的导出器可供选择,但其中一个常见的目标是将数据导出到 OpenTelemetry Collector。本篇文章将深入探讨收集器以及如何使用它。 选 OTel Collector 还是…

(一)Dubbo源码解析:增强SPI

〇、前言 在Dubbo的架构设计中,如何可以通过“类插拔”的方式,对其功能进行灵活的扩展或者削弱,那么,SPI起到了极其关键的作用。本篇文章作为分析Dubbo源码的第一篇文章,我们先暂时放下“服务注册发布流程”、“服务启…

【蛋白-蛋白】Rosetta InterfaceAnalyzer 学习笔记

Rosetta InterfaceAnalyzer是一种用于分析蛋白质相互作用界面的工具,可以计算结合能、埋藏界面表面积、包装统计数据和其他有用的界面指标。 这里以(PDB:3R2X)为例,介绍如何利用Rosetta中InterfaceAnalyzer来快速分析蛋白-蛋白相互作用,并提…

SHELL 基础 显示字符颜色, 修改历史命令,Linux里的命令 执行顺序

echo 打印命令 : 显示字符串 : [rootserver ~]# echo this is SHELL language this is SHELL language [rootserver ~]# echo this is SHELL language this is SHELL language [rootserver ~]# echo "this is SHELL language" this is SH…