Windows 为什么windeployqt输出不需要的文件,我如何才能消除它们?

Windows 为什么windeployqt输出不需要的文件,我如何才能消除它们?,windows,qt,deployment,mingw,building,Windows,Qt,Deployment,Mingw,Building,我被告知“windeployqt”实用程序,它应该能够收集正确运行Windows Qt应用程序所需的所有Qt/MinGW DLL。所以我试了一下 不幸的是,我注意到它收集的文件比必要的多。我将windeployqt实用程序收集的文件与“依赖项行者”报告的文件进行了比较。确实需要的文件已正确收集,但由于某些原因,还收集了以下文件: Qt5Svg.dll iconengines\qsvgicon.dll imageformats\qdds.dll imageformats\qgif.dll imag

我被告知“windeployqt”实用程序,它应该能够收集正确运行Windows Qt应用程序所需的所有Qt/MinGW DLL。所以我试了一下

不幸的是,我注意到它收集的文件比必要的多。我将windeployqt实用程序收集的文件与“依赖项行者”报告的文件进行了比较。确实需要的文件已正确收集,但由于某些原因,还收集了以下文件:

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的原因。

windeployqt实用程序将解析您的“EXE”文件并确定使用了哪些软件包,然后相应地复制所需的DLL。确保在已配置/设置的环境中调用该实用程序

我以以下方式使用该实用程序:

  • 执行项目的发布清理构建,并记录生成路径和生成的“exe”。因疏忽

    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

Dependency Walker没有列出DLL这一事实并不意味着它不是必需的

Dependency Walker将仅列出Windows加载和启动exe所需的DLL。但其他DLL可能会在程序运行时加载。当Qt加载像

因为它无法预先知道需要什么插件,
windeployqt
部署所有Qt插件(所有这些插件都与所需的DLL相关)

您可以使用命令行修饰符(如
--no-plugins
)来改变windeployqt的行为方式(请参阅
windeployqt-help


您可以查看Qt文档,特别是关于。

您如何在未安装任何开发工具的干净机器上调用“windeployqt”?打开应用程序并进入包含所有DLL的文件夹。选择all并执行shift+delete,应用程序未使用的DLL将被删除。@Mohammed Kanan:我在Qt/MinGW构建环境中使用CMake,其中winqtdeploy由${add_custom_命令调用(目标${PROJECT_NAME}POST_构建命令windeployqt--force--debug--no translations--dir“${CMake_BINARY_dir}/dist/bin”“${PROJECT_NAME}.exe”)@安吉尔·里斯特斯基:谢谢你的好建议。但是我们的目标是我们的自动构建系统将输出一组适当的二进制文件。似乎额外的DLL是“涉及”的,因为程序使用的是QWidget类(GUI工具)。我们使用ist只是为了显示一些文本消息——这似乎解释了为什么即使缺少QSvg.dll等,我们也没有遇到任何问题。谢谢