有时候发布用Qt写的软件是件令人烦恼的事情,明明发布的只是一个简单功能的小软件,非得再附上一堆超大的动态链接库,实在让人觉得汗颜

在可执行文件单文件化方面,有多种方法。常用的是编译并使用静态 Qt 库、使用 exe 打包工具等。exe 打包工具有很多,本文介绍使用 Enigma Virtual Box 来打包和压缩文件。

从收集动态链接库开始

通常是通过查找软件对动态链接库的依赖来收集的,有多种流行的工具软件可供使用:Process Explorer(微软自家的东东)、Dependency Walker 都是不错的软件。但本文介绍的是Qt自带的小工具:windeployqt.exe

windeployqt 是一个用于 Windows 系统上的控制台程序,方便起见,可以写一个批处理文件(*.bat)放在 exe 所在的文件夹:

 
1
2
3
4
5
 
@echo off
C:\Qt\Qt5.5.0\5.5\mingw492_32\bin\windeployqt.exe target.exe(换成你的exe文件名)
pause
 

执行批处理后可以看到文件夹加入了不少动态链接库:

注意,可能会缺少三个动态链接库 libgcc_s_dw2-1.dll、libstdc++-6.dll、libwinpthread-1.dll,需要手工把他们复制过来。如果不需要国际化,可以把translations文件夹删除,以减小一部分空间的占用。还有几个动态库在程序加载的时候没有调用过,似乎也可以删除。

Enigma Virtual Box 简介

Enigma Virtual Box 是一款免费软件,可以将软件的关联文件和注册表信息合并到单个文件,通过在RAM中的虚拟化来使用(不需要向磁盘释放打包了的文件)。它的工作原理是在主可执行程序文件中嵌入一个先于主程序执行的加载器,加载器截获程序对磁盘的读写操作,如果目标文件已被虚拟化(打包),那么就在内存中模拟这个文件并返回请求的结果。它还支持压缩功能,可以大大地减小单 exe 文件的大小。

生成单可执行文件

在 Files 选项卡的 Virtual Box Files 上右键并点击 Add Folder Recursive ,选择软件所在文件夹。

文件夹内的所有文件都被加入列表,再从中删除主 exe 文件和其他未被用到的文件。

点击 Files Options ,勾选 Enable Files Virtualization 与 Compress Files。

最后点击 Process ,执行打包和压缩作业就完成了单 exe 文件的制作,是不是很简单呢?经压缩后,生成的 exe 文件只有8M多了。

这下子可以愉快地发布给小伙伴们使用了

相关链接

Enigma Virtual Box 介绍与下载: http://enigmaprotector.com/en/aboutvb.html

QT实现单个EXE文件的更多相关文章

  1. 在.NET Core 3.0中发布单个Exe文件(PublishSingleFile)

    原文:在.NET Core 3.0中发布单个Exe文件(PublishSingleFile) 假设我有一个简单的" Hello World"控制台应用程序,我想发送给朋友来运行.朋 ...

  2. 在.NET Core 3.0中发布单个EXE文件

    假设我有一个简单的“ Hello World”控制台应用程序,我想发送给朋友来运行.朋友没有安装.NET Core,所以我知道我需要为他构建一个独立的应用程序.很简单,我只需在项目目录中运行以下命令: ...

  3. .net core 发布单个exe 文件, 并优化缩小大小

    最新版的.net core 3.0 可以通过命令行发布为exe文件, 操作步骤如下: 在项目目录下打开控制台: 输入命令: dotnet publish -r win-x64 -c Release - ...

  4. QT debug执行exe文件 应用程序无法正常启动0xc000007b

    遇到这种错,发现并不是因为缺失dll文件,因为我把需要的DLL都放到Debug文件下了,但还是有这问题: 解决方法: 右键点击-- >我的电脑--属性-->高级系统设置-->环境变量 ...

  5. Merging a WPF application into a single EXE(WPF应用程序合并成单个Exe文件)

    I always dislike handing off little applications to people. Not because I can’t, but because of the ...

  6. 将visual sdudio+Qt5.12 制作的程序打包成单个exe

    在GitHub上下载了个qt程序,由于C++不太会,经过安装qt.修改编码等一系列操作终于可以运行了. 生成的exe在运行时依赖很多dll或者图片文件,直接拷贝到其他电脑上无法运行,可以将依赖的dll ...

  7. python进阶--打包为exe文件

    一.Python打包为EXE文件有不少方案,比较常用的有下面两种方式: 1.使用py2exe 详细介绍:http://www.cnblogs.com/jans2002/archive/2006/09/ ...

  8. 如何用Qt自动拷贝exe依赖的dll

    QT生成的.exe文件不能运行的解决办法 之前的数独项目的GUI,当我的Qt项目生成exe时,由于缺少了相关的依赖dll文件,打开会一直报缺少依赖文件的错: 然后一开始我到安装的Qt文件夹里把这些有Q ...

  9. Pycharm下将py文件打包成exe文件

    1. 在PyCharm下安装PyInstaller 1. 首先,打开自己要发布的工程   2. 点击底部的[Terminal]打开终端,中输入命令pip install pyinstaller后回车, ...

随机推荐

  1. POJ-1330--Nearest Common Ancestors(离线LCA)

    LCA离线算法 它需要一次输入所有的询问,然后有根节点开始进行深度优先遍历(DFS),在深度优先遍历的过程中,进行并查集的操作,同时查询询问,返回结果. 题意: 求A ,B两点的最近公共祖先 分析: ...

  2. 【转】Android 菜单(OptionMenu)大全 建立你自己的菜单--不错

    原文网址:http://www.cnblogs.com/salam/archive/2011/04/04/2005329.html 菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中, ...

  3. 动态规划:NOI2013 快餐店

    Description 小 T打算在城市C开设一家外送快餐店.送餐到某一个地点的时间与外卖店到该地点之间最短路径长度是成正比的,小T希望快餐店的地址选在离最远的顾客距离最近 的地方. 快餐店的顾客分布 ...

  4. 图论(对偶图):COGS 470. [NOI2010]海拔

    470. [NOI2010]海拔 ★★★☆   输入文件:altitude.in   输出文件:altitude.out   简单对比 时间限制:2 s   内存限制:512 MB 海拔 [问题描述] ...

  5. zoj 3672 Gao The Sequence

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4915题意:a[k]-一个任意的数,这个数要等于a[1]~a[k]每个数减去任意 ...

  6. Json.Net学习笔记(十) 保持对象引用

    更多内容见这里:http://www.cnblogs.com/wuyifu/archive/2013/09/03/3299784.html 默认情况下,Json.Net将通过对象的值来序列化它遇到的所 ...

  7. 最小生成树 10.1.5.253 1505 poj 1258 http://poj.org/problem?id=1258

    #include <iostream>// poj 1258 10.1.5.253 1505 using namespace std; #define N 105 // 顶点的最大个数 ( ...

  8. I - Arbitrage

    题目大意:套汇 套利是使用货币汇率的差异将一个单位的货币转换为多个相同的货币单位,例如1美元可以买0.5英镑,1英镑可以买10法郎,1法郎可以买0.21美元,然后聪明的人经过一些列兑换可以得到 1*0 ...

  9. UITextField知多少

    //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, ...

  10. 使用jquery trigger 触发a标签的click事件取代window.open方法

    var ohtml='<div class="friend-dialog tac pt15 pb20">'+ '<div class="f-h32&qu ...