为什么windeployqt输出不需要的文件,我该如何摆脱它们?
我被告知“windeployqt”实用程序,它应该能够收集正确运行我的Windows Qt应用程序所需的所有Qt/MinGW DLL。所以我试了一下。为什么windeployqt输出不需要的文件,我该如何摆脱它们?
不幸的是我注意到它收集更多的文件,然后需要。我将windeployqt实用程序收集的文件与“Dependency Walker”报告的文件进行比较。这是真正需要的文件已被妥善收集,但收集出于某种原因还下列文件:
Qt5Svg.dll
iconengines\qsvgicon.dll
imageformats\qdds.dll
imageformats\qgif.dll
imageformats\qicns.dll
imageformats\qico.dll
imageformats\qjp2.dll
imageformats\qjpeg.dll
imageformats\qmng.dll
imageformats\qsvg.dll
imageformats\qtga.dll
imageformats\qtiff.dll
imageformats\qwbmp.dll
imageformats\qwebp.dll
的应用只是QBUS交易和使用QWidgets显示一个简单的窗口。因此我没有看到为什么收集这些DLL。
的事实是没有通过的Dependency Walker列出一个DLL并不意味着它是不是必需的。
Dependency Walker将只列出您需要加载并由Windows启动的exe所需的DLL。但其他DLL可能会在您的程序运行时加载。这种情况尤其是当Qt的加载插件,像image format plugins
,因为它不能事先将需要什么插件知道,windeployqt
部署Qt的所有插件(所有这一切都在考虑到所需的DLL相关)。
您可以通过使用命令行修饰符如--no-plugins
(请参阅windeployqt -help
)来改变windeployqt的行为方式。
您可以在Qt文档中查看Qt for Windows - Deployment,特别是关于Qt Plugins的部分。
由于程序使用的是QWidget类(GUI工具),因此看起来额外的DLL“参与”了。我们使用ist只是为了显示一些文本消息 - 这似乎解释了为什么我们没有任何问题,即使QSvg.dll等丢失。谢谢。 –
windeployqt实用程序将解析您的“EXE”文件并确定使用了哪些软件包,然后相应地复制所需的DLL。确保在已配置/设置的环境中调用该实用程序。
我使用该工具以这种方式:
-
执行该项目,并记录构建路径释放干净的构建和“EXE”中产生。对于insrance
c:\myApp\release\
和myApp.exe
创建部署文件夹//比发行版文件夹//等。例如
c:\myApp\deploy
然后调用从Qt的命令行实用程序的实用程序,如下所示:
- Go to all progrmas --> Qt --> Qt command line utility
- cd c:\myApp\deploy
- windeployqt --dir . c:\myApp\release\myApp.exe
你是如何援用'windeployqt'的? –
在没有安装任何开发工具的干净机器上打开应用程序,并进入您拥有所有dll的文件夹。选择所有,然后转到+删除,未被应用程序使用的dll将被删除。 –
@Mohammed Kanan:我在Qt/MinGW构建环境中使用CMake,其中winqtdeploy由_add_custom_command调用(TARGET $ {PROJECT_NAME} POST_BUILD COMMAND windeployqt --force --debug --no-translations --dir“$ {CMAKE_BINARY_DIR}/dist/bin“”$ {PROJECT_NAME} .exe“) –