网站首页 > 技术文章 正文
当我们用Qt Creator开发编译完成一个程序后,通过点击Qt Creator界面左下角的“运行(Run)”按钮,能够正常运行程序。但当我们找到编译输出目录,想要双击exe文件直接运行程序时,会报丢失dll文件的系统错误[衰](如图1)。这是由于程序运行所需的各种动态库还没有被包含进去。程序的打包发布就是将程序运行所必需的动态库添加完整的过程。
另外,在没有专门设置图标前,刚开发的程序(如图1中的例子samp1.exe)的图标是一个简单的命令行图标,显得不是很专业[捂脸],在程序发布之前最好替换成你想要的图标。
在本篇文章中,我们首先给程序设置一个图标。编译通过后,将程序运行所需的文件打包,以便你能把程序分享给别人或在其他电脑上运行。最后,打包后的文件体积有些大,我研究了一种能精简体积的方法。
一、设置程序图标
设置图标的方法有多种,这里作为小白当然选择一种最简单的方法[呲牙]。
首先准备一个ico图标文件。我在电脑上随便找了一个音乐形状的图标文件,将其复制到项目源文件目录中,并重命名为myico.ico,如图2所示。
在Qt Creator中打开项目文件,在“Edit”界面下,双击打开项目文件“samp1.pro”。在文件末尾,添加一行“RC_ICONS = myico.ico”(注意等号前后各有一个空格)。
重新编译程序并运行。这时编译输出目录中samp1.exe的图标,以及程序运行界面左上角的图标,都已经替换为我们想要的图标了,如图4所示。
二、打包发布程序
为了打包发布程序,首先新建一个文件夹(这里我在Projects下新建了文件夹samp1_pack),然后将想要打包的samp1.exe文件复制到该文件夹中,如图5所示。
由于我的程序是用MinGW 64bit编译器编译的,因此在开始菜单中找到对应版本的Qt命令行工具(不能使用windows自带的cmd),点击运行。在命令界面,首先切换当前目录到打包目录(我的是D:\Qt\Projects\samp1_pack),然后运行打包命令“windeployqt samp1.exe”。
命令运行完成后,在资源管理器中打开打包目录,发现除了原来的samp1.exe外,多出了很多dll文件和子目录(除了translations外其余目录中也是dll)。这些多出的东西基本都是动态链接库。对于一个几乎什么也不干的程序,打包后的体积约66MB,确实是不小了[捂脸]。
三、精简体积
Qt打包命令windeployqt比较全面的将动态库包含进来,但其实有些库是不需要的。想要精简打包文件夹的体积,必须要知道哪些文件是运行所必须的。
在Windows系统中,可以通过一个免费小软件Dependency Walker分析一下动态库的关联性。官网地址为:http://www.dependencywalker.com/。
打开Dependency Walker软件,点击左上角的“打开”按钮,找到我们打包的exe文件,然后点击“打开”按钮。注意这时不要进行任何操作,软件运行较慢(一动就显示未响应[捂脸]),耐心等待结束即可。
在得到分析结果后(如图9所示),我用红框标注出了在打包文件夹内存在的dll文件,这些都是运行必须的动态库。
将除了上面找到的dll文件以外其他的文件和文件夹全部删除,尝试运行程序,出现如图10所示的运行错误[衰]。注意到“Qt platform plugin”的提示,表明误删了Qt平台插件。于是将“platforms”文件夹恢复,之后程序终于能够正常运行了[抠鼻]。图11是精简之后最终保留的所有文件。
精简之后打包文件夹的大小约30MB,约为原来的一半左右。将文件夹压缩(RAR,最好),大小为8.8M,已经在可以接受的范围了[捂脸]。
总结一下,本文中我们主要学会了一种简单的设置程序图标的方法和使用windeployqt打包程序的方法。Qt打包的程序有些体积过大,因此基于Dependency Walker软件研究了精简体积的方法。
限于小白我的水平有限(总感觉越来越难了[捂脸]),本文有任何不对之处或者有更好的方法,请大家多多关注评论[赞]。
—————往期目录——————
从零开始学Qt – 04:编写一个Hello World程序
————————————————
- 上一篇: 对高可用集群构建的思考
- 下一篇: debian 12.6 安装Qt 6.7 LTS版本
猜你喜欢
- 2025-01-07 推荐一款支持40+通讯协议的强大工业调试软件
- 2025-01-07 2024年windows原生应用用什么框架开发?
- 2025-01-07 基于跨平台的实时数据处理系统的设计
- 2025-01-07 一文分析QtCreator中MSVC编译套件
- 2025-01-07 C++Qt开发——事件处理函数
- 2025-01-07 Qt开发——NotePad实例开发
- 2025-01-07 解决Linux 下QT Creator 无法输入中文
- 2025-01-07 (1) 安装配置 pyqt5(windows),使用designer设计工具
- 2025-01-07 Linux平台上的PHP IDE盘点
- 2025-01-07 Ubuntu 24.04 解决运行 Flameshot 报错:Unable to capture screen
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)