QT程序打包发布Release时的注意事项

2022-04-13 10:21:07 浏览数 (1)

QT的release编译打包后,不能直接拿来用。缺少很多的dll。

如果一个个的拷贝,不知道要哪些,不要哪些Dll,一个个找也麻烦。好在QT提供了windeployqt.exe程序专门用来提取相关的DLL。但是这还是有个坑,这里记录下留作以后使用注意。

windeployqt.exe的使用方法:

新建一个文件夹,把项目工程release模式下编译生成的.exe文件单独拷贝出来,放到新建的文件夹内。在新建的文件夹内打开cmd窗口,执行命令:

代码语言:javascript复制
D:QtQt5.9.05.9mingw53_32binwindeployqt.exe -no-angle -no-opengl-sw myapp.exe

有个坑是,必须得把你的QT安装目录的D:QtQt5.9.0ToolsQtCreator 和D:QtQt5.9.0Toolsmingw530_32bin假如到环境变量中,然后再在cmd窗口上打包。否则会报错,提示找不到libgcc_s_dw2-1.dll,即使你在电脑上找到它放进去也没用。

注意:如果是QML的应用,Qml的打包和QT传统的打包方式也是不同的。

QT的打包可以用这个:

D:QtQt5.10.05.10.0msvc2015binwindeployqt.exe -no-angle -no-opengl-sw test.exe QML的应用打包:通过cd命令到你的exe存放的地方,并输入下面的命令:

windeployqt -qmldir "源码路径" test.exe --release 命令执行完后,在你exe生成的目录里生成qt的依赖文件。 如果你的源码使用了三方库或者生成了动态链接库,那么需要手动将需要的dll文件复制到目录下,实际运行试试,是不是可以正常运行。

执行完上述命令后就打包成功啦,但是体积真够大。这是开始删减些没用到的库和文件夹。

  1. libEGL.dll, libGLESV2.dll 这两个文件是 ANGLE 的文件,可以去掉。opengl32sw.dll 是软件模拟 OpenGL,除非用户的系统连 DirectX 支持都不完整——虚拟机环境就是这样——不然这个文件也完全没有用。 QtWidgets/C 程序都不用 OpenGL,所以直接去掉即可。可在调用 windeployqt.exe 时加"--no-angle" 和 "--no-opengl-sw" 这两个参数。
  2. 如果没有使用 svg 的话,iconenginesqsvgicon.dll, imageformatsqsvg.dll, Qt5Svg.dll 这三个文件也可以删掉
  3. 如果没有国际化用户的话,translations 里面的翻译文件也可以删掉。
  4. 如果 imageformats 目录里面有几种图像格式没用上,也可以删掉。通常把整个目录都删掉,Qt已经编译了 png 的支持,能读写程序包含的图标就够,其它格式不重要。
  5. qmltooling 和 Qt5Network.dll 是用于 QML 调试用的,可以删掉。
  6. 到第三部压缩时,可以减小文件大小。

压缩

Enigma virtual box是免费的软件虚拟化工具,它可以将多个文件封装到您的应用程序主文件,这样您的软件就可以制作成为单文件的绿色软件。 enigma virtual box 支持所有类型的文件格式,包括动态链接库 (.dll), activex/com (.dll, .ocx), 视频/音频文件 (.avi, .mp3), 文本文件 (.txt, .doc) 等。

这个错多因为环境变量的影响。把上面添加的两个环境变量往前移动移动,再观察下环境变量里是否有其他的版本的库或Mingw影响。

设置应用程序图标方法:

简单三步走,搞定

①创建一个图标格式的文件,可以网上在线将普通的图形格式转成.ico 格式的图标文件

http://www.faviconico.org/

这个网站可以在线转换png、jpg、gif文件为ico格式,亲测很好用

②将转换好的图标文件myico.ico放到源码目录,就是.Pro所在的文件夹。

0 人点赞