windows - 为什么 Windeployqt 输出不需要的文件,如何删除它们?

标签 windows qt deployment mingw building

我获悉“windeployqt”实用程序,它应该能够收集正确运行我的 Windows Qt 应用程序所需的所有 Qt/MinGW DLL。于是我就尝试了一下。

不幸的是,我注意到它收集的文件多于必要的文件。我将 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 的行为方式(请参阅 windeployqt -help)。

您可以看看Qt for Windows - Deployment在 Qt 文档中,特别是关于 Qt Plugins 的部分.

关于windows - 为什么 Windeployqt 输出不需要的文件,如何删除它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46729307/

相关文章:

c++ - 通过命名管道发送 DWORD

c++ - 如何删除选定的图形项目组?

asp.net - 在 asp.net 发布期间不要删除特定文件?

Python 程序共存于 Windows

c# - 在 Windows 8 应用程序中浏览文件夹?

c++ - 如何根据 bool 值保存具有不同扩展名的文件

c++ - 如何将小部件对象传递给 Qt 中的函数?

javascript - 在服务器上处理单页应用程序前端和 API 后端的最佳方法

deployment - 为发布的版本保存哪些工件?

c++ - 获取进程信息