【问题标题】:Why does windeployqt output files that are not required, and how can I get rid of them?为什么 windeployqt 输出不需要的文件,我该如何摆脱它们?
【发布时间】:2017-10-13 11:51:45
【问题描述】:

我被告知“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 的原因。

【问题讨论】:

  • 你是如何调用“windeployqt”的?
  • 在没有安装任何开发工具的干净机器上打开应用程序并进入所有 dll 所在的文件夹。全选然后shift+delete,不被app使用的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")
  • @Angel Risteski:感谢您的精彩提示。但目标是我们的自动构建系统将输出一组适当的二进制文件。

标签: windows qt deployment mingw building


【解决方案1】:

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

Dependency Walker 只会列出 Windows 加载和启动 exe 所需的 DLL。但其他 DLL 可能会在您的程序运行时稍后加载。尤其是当 Qt 加载像 image format plugins 这样的插件时会发生这种情况

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

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

您可以查看 Qt 文档中的Qt for Windows - Deployment,尤其是关于Qt Plugins 的部分。

【讨论】:

  • 似乎附加的 DLL 被“参与”了,因为程序使用的是 QWidget 类(GUI 工具)。我们使用 ist 只是为了显示一些文本消息——这似乎解释了为什么即使 QSvg.dll 等丢失了我们也没有任何问题。谢谢。
【解决方案2】:

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

我以这种方式使用该实用程序:

  • 执行项目的release clean build并记录构建路径和生成的“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

【讨论】:

    猜你喜欢
    • 2020-12-25
    • 2019-06-07
    • 2019-01-12
    • 1970-01-01
    • 2012-04-18
    • 2017-08-24
    • 2023-03-04
    • 2018-12-16
    相关资源
    最近更新 更多