QT的release编译打包后,不能直接拿来用。缺少很多的dll。
如果一个个的拷贝,不知道要哪些,不要哪些Dll,一个个找也麻烦。好在QT提供了windeployqt.exe程序专门用来提取相关的DLL。但是这还是有个坑,这里记录下留作以后使用注意。
windeployqt.exe的使用方法:
新建一个文件夹,把项目工程release模式下编译生成的.exe文件单独拷贝出来,放到新建的文件夹内。在新建的文件夹内打开cmd窗口,执行命令:
D:\Qt\Qt5.9.0\5.9\mingw53_32\bin\windeployqt.exe -no-angle -no-opengl-sw myapp.exe
有个坑是,必须得把你的QT安装目录的D:\Qt\Qt5.9.0\Tools\QtCreator 和D:\Qt\Qt5.9.0\Tools\mingw530_32\bin假如到环境变量中,然后再在cmd窗口上打包。否则会报错,提示找不到libgcc_s_dw2-1.dll,即使你在电脑上找到它放进去也没用。
注意:如果是QML的应用,Qml的打包和QT传统的打包方式也是不同的。
QT的打包可以用这个:
D:\Qt\Qt5.10.0\5.10.0\msvc2015\bin\windeployqt.exe -no-angle -no-opengl-sw test.exe
QML的应用打包:通过cd命令到你的exe存放的地方,并输入下面的命令:
windeployqt -qmldir "源码路径" test.exe --release
命令执行完后,在你exe生成的目录里生成qt的依赖文件。 如果你的源码使用了三方库或者生成了动态链接库,那么需要手动将需要的dll文件复制到目录下,实际运行试试,是不是可以正常运行。
执行完上述命令后就打包成功啦,但是体积真够大。这是开始删减些没用到的库和文件夹。
- libEGL.dll, libGLESV2.dll 这两个文件是 ANGLE 的文件,可以去掉。opengl32sw.dll 是软件模拟 OpenGL,除非用户的系统连 DirectX 支持都不完整——虚拟机环境就是这样——不然这个文件也完全没有用。 QtWidgets/C++ 程序都不用 OpenGL,所以直接去掉即可。可在调用 windeployqt.exe 时加"--no-angle" 和 "--no-opengl-sw" 这两个参数。
- 如果没有使用 svg 的话,iconenginesqsvgicon.dll, imageformatsqsvg.dll, Qt5Svg.dll 这三个文件也可以删掉
- 如果没有国际化用户的话,translations 里面的翻译文件也可以删掉。
- 如果 imageformats 目录里面有几种图像格式没用上,也可以删掉。通常把整个目录都删掉,Qt已经编译了 png 的支持,能读写程序包含的图标就够,其它格式不重要。
- qmltooling 和 Qt5Network.dll 是用于 QML 调试用的,可以删掉。
- 到第三部压缩时,可以减小文件大小。
压缩
Enigma virtual box是免费的软件虚拟化工具,它可以将多个文件封装到您的应用程序主文件,这样您的软件就可以制作成为单文件的绿色软件。
enigma virtual box 支持所有类型的文件格式,包括动态链接库 (.dll), activex/com (.dll, .ocx), 视频/音频文件 (.avi, .mp3), 文本文件 (.txt, .doc) 等。
这个错多因为环境变量的影响。把上面添加的两个环境变量往前移动移动,再观察下环境变量里是否有其他的版本的库或Mingw影响。
设置应用程序图标方法:
简单三步走,搞定
①创建一个图标格式的文件,可以网上在线将普通的图形格式转成.ico 格式的图标文件
这个网站可以在线转换png、jpg、gif文件为ico格式,亲测很好用
②将转换好的图标文件myico.ico放到源码目录,就是.Pro所在的文件夹。