以前不知道还有单文件封包工具这种好东西,工具软件都是用静态编译来生成独立的exe,有了封包工具,再也不用费心去静态编译了,只需要每次发布的时候封包即可。
step-0
首先,Qt生成exe之后若没有带依赖库是不能直接双击运行的。
step-1
Qt提供的windeployqt命令可以将Qt提供的库打包,只需要用Qt自带的命令行工具(开始菜单里Qt目录下能找到那个黑框框),使用此命令就能将依赖库打包到一起。
step-2
库和exe打包到一起虽然能双击exe运行了,但是带一大堆动态库不大方便,于是就需要把他们合成为一个*.exe文件。我们可以静态编译Qt程序,但需要换一个版本就要编译一下Qt源码,因为开源版默认带的库是动态链接的,而且Qt开源版用的LGPL协议其实也没让你静态编译,需要购买商用许可。相较于静态编译,使用封包工具就方便多了,至少不用跟着版本静态编译Qt源码,还能把其他非Qt动态库也放一起。
我用的是enigma virtual box这个封包工具,操作比较简单,官网也有免费版 http://enigmaprotector.com/en/downloads.html
下载之后直接安装,然后打开
step-3
有了windeployqt打包的动态库,只需要三步就可以封包了
先点击浏览,选择目标*.exe程序
然后点击左下角增加,我是直接选的这个exe的文件夹,然后把exe从文件列表中移除
最后点击右下角执行封包,就ok了
step-4
最后,直接点击生成的那个*.exe就可以运行了,Qt唯一不爽的就是他很多实现不是直接用的系统API,二是自己封装了一层,这导致文件太大,如果可以像mfc或者c#那样调用本地的库就好了