我们用QT(简体中文首页)编译好执行程序就直接运行,则会发现少很多动态链接库,如下图:
类似的一大堆错误。
那么就需要用QT自带的部署命令。
将编译好的release版本程序放入一个空目录,打开QT的命令行,执行windeployqt命令:
比如我的例子是:
执行:
> windeployqt D:\VM\ShareFolder\softwares\test\EricssonBackupParse.exe
完成后多了很多目录和库,程序就可以正常运行了:
当然不需要多国语言的话,translations目录是可以删掉的。
通过上面的例子可以看到,发布一个QT程序需要很多目录和文件,交给前方需要打包成压缩包,用的时候需要解开压缩包,始终觉得稍微不方便。
这时候一般就可以用Enigma Virtual Box打包成单文件再发布。
同样刚才的例子:
点击打包按钮,等待完成:
最后把生成好的文件留下了,其他文件可以删掉了。
此例打包成单文件完成后有20多MB。。。
如果你也喜欢顺手用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.