Qt-windeployqt部署发布浅谈
本文最后更新于:2025年1月11日 晚上
前情提要
众所周知,我们可以在Qt Creator
中运行项目,或者是在release/debug
文件夹中双击exe
运行应用程序
有些同学可能对后者存在些许疑惑,时常会看到找不到dll
等错误
这是由于未在环境变量中加入msvc/bin
| mingw/bin
等目录(环境变量可以看做是搜索目录)
而bin
目录中存放的正是项目中依赖的各种Qt-dll
exe
的运行依赖各种dll
,这是常识
但是具体依赖哪些dll
,以及哪几类dll
呢
从来源上,可以分为两种:Windows dll
& Qt dll
Windows dll
通常位于C:\Windows\System32
文件夹下(以x64
为例),一般系统自带,无需特殊处理Qt dll
一般位于msvc/bin
|mingw/bin
(包含版本号),一般用户系统无Qt
,大概率缺失,需要程序自带
所以,为了将应用程序打包发布到一般PC
上,我们需要搜集依赖的Qt-dll
并与exe
置于同级目录下,方便寻址
But How
正片(叠底
我们可以通过
Dependencies
软件任务管理器 - 性能 - 资源监视器 - 模块
查看exe
的dll
依赖
但是一个个复制实在是,情けない,丢程序员的脸!
Qt
为我们提供了命令行工具windeployqt
来自动化部署(这名字:win + deploy +qt 秀)
当然,我们不能在cmd
中直接使用该命令
而是应该在Qt提供的命令行环境 Qt 5.15.2 (MSVC 2019 64-bit)
| Qt 5.15.2 (MinGW 8.1.0 64-bit)
中进行(选择对应的编译器和版本)
详细原因请参考我的另一篇blog:windeployqt发布项目 为何总是缺少dll - MrBeanC-Blog (mrbeancpp.github.io)
我们这次的重点并不在于此
windeployqt
//该工具可以帮助我们将exe
所需要的Qt-dll
拷贝到exe
同级目录下
1 |
|
只要在命令行中改变(cd·Change Directory
)工作目录至exe
所在目录
并执行windeployqt test.exe
便会自动将依赖文件(包括dll
和图标等众文件)拷贝至exe
所在目录
此时,打包为压缩包并一齐发布即可
MSVC背刺
如果是MSVC
编译器,要注意一点
MSVC
依赖于VS
,可能会用到VS
下的一些dll
如:MSVCP140.dll
等C++
运行时环境
不属于Qt
,所以需要自行拷贝(虽然多数电脑上包含)
More
如果你认为这篇博客到此为止,那就太年轻了
那和一般的CV blog有什么区别
咳咳
windeployqt
直接打包发布,运行并无大碍,但问题在于默认复制的依赖多数冗余,需要手动精简
何がいる
libEGL libGLESV2 opengl32sw
libEGL.dll
,libGLESV2.dll
这两个文件是 ANGLE 的文件,可以去掉
opengl32sw.dll
是软件模拟 OpenGL,除非用户的系统连 DirectX 支持都不完整(例如虚拟机),不然也没用
可以用--no-angle
& --no-opengl-sw
这俩参数去除
svg
如果没有使用svg
的话,iconengines\qsvgicon.dll
, imageformats\qsvg.dll
, Qt5Svg.dll
这三个文件也可以删掉
这是矢量图格式,大部分程序应该都不需要
translations
如果没有国际化支持的话,translations
文件夹可以整个删掉
或者使用参数--no-translations
Final
综上,推荐使用:
for Qt 5
1 |
|
对于 Qt 6
,windeployqt
的参数稍有不同,没有了--no-angle
,推荐如下:
1 |
|
Peace
Ref
QT使用windeployqt部署发布及其精简_itas109的博客-CSDN博客
windeployqt发布项目 为何总是缺少dll - MrBeanC-Blog (mrbeancpp.github.io)