1)发布QT生成的程序
我们用QT(简体中文首页)编译好执行程序就直接运行,则会发现少很多动态链接库,如下图:
类似的一大堆错误。
那么就需要用QT自带的部署命令。
将编译好的release版本程序放入一个空目录,打开QT的命令行,执行windeployqt命令:
比如我的例子是:
执行:
> windeployqt D:\VM\ShareFolder\softwares\test\EricssonBackupParse.exe
完成后多了很多目录和库,程序就可以正常运行了:
当然不需要多国语言的话,translations目录是可以删掉的。
2)用Enigma Virtual Box打包成单文件
通过上面的例子可以看到,发布一个QT程序需要很多目录和文件,交给前方需要打包成压缩包,用的时候需要解开压缩包,始终觉得稍微不方便。
这时候一般就可以用Enigma Virtual Box打包成单文件再发布。
同样刚才的例子:
- 先选择主exe文件。
- 再把主exe文件所在目录当作【%DEFAULT FOLDER%】递归加入,请注意,这里要去掉不必要的文件和文件夹,比如主文件本身,以及日志,测试生成的临时文件等。
- 这个例子中不需要注册表,自己的项目得看情况。
- 注意可以在”文件选项“中选择压缩,生成的结果小一些。
点击打包按钮,等待完成:
最后把生成好的文件留下了,其他文件可以删掉了。
此例打包成单文件完成后有20多MB。。。
3)注意和UPX压缩冲突
如果你也喜欢顺手用UPX压缩主程序exe文件,那么再用Enigma Virtual Box打包后,程序是无法正常执行的(至少在我这里是这样)。
也就是说你不能先用UPX压缩,再Enigma Virtual Box打包。
D:\VM\ShareFolder\softwares\test>upx -9 -k EricssonBackupParse.exe
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2020
UPX 3.96w Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020
File size Ratio Format Name
-------------------- ------ ----------- -----------
462336 -> 209920 45.40% win64/pe EricssonBackupParse.exe Packed 1 file.
D:\VM\ShareFolder\softwares\test>
但是如果先用Enigma Virtual Box打包,再UPX压缩则会报错。
嗯,至少不会不能运行。
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2020
UPX 3.96w Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020
File size Ratio Format Name
-------------------- ------ ----------- -----------
upx: EricssonBackupParse_v1.05.exe: CantPackException: section size problem
Packed 1 file: 0 ok, 1 error.