【问题标题】:Qt Windows Deployment ProcessQt Windows 部署过程
【发布时间】:2015-11-19 00:12:02
【问题描述】:

我正在学习如何使用 Qt 创建应用程序。我创建了一个在任何安装了 Qt 的机器上运行良好的小应用程序。我想使用动态链接的 Qt 库将其部署到 Windows。我按照找到的说明here 并在其他 Stackoverflow 文章的帮助下,我能够让应用程序正常运行,但现在什么也没有出现。应该有一个带有按钮等的小 UI,但是尽管 Windows 任务管理器显示应用程序正在运行,但它并没有显示出来。

我的第一个想法是我丢失了一些dll文件,但是即使我复制了在C:\Qt\5.5\msvc2013_64\bin中找到的每个dll,整个C:\Qt\5.5\msvc2013_64\plugins目录,msvcp120 .dll、msvcr120.dll 和 plaforms\qwindows.dll 到应用程序目录我仍然无法让它显示 UI。

相同的应用程序可以在任何安装了 Qt 的 Win x64 机器上运行。我只是不认为要求用户下载 700mb 的工具集来运行 9kb 的应用程序是一个非常强大的解决方案。

Qt 部署到 Windows 时缺少哪一步?

具体而言,我已将其设为open source project. 您可以在 bin/Win_x64 目录中查看应用程序的发布版本,其中包含我认为运行应用程序所必需的所有 .dll 文件。如果您将该文件夹复制到未安装 Qt 的 Win x64 计算机上,那么您应该能够重现我的错误。

编辑1: 我被要求提供我的 build/Release 目录中的文件列表:

ArkCharacterSelector.exe
ArkCharacterSelector.res
CharacterManager.obj
Logger.obj
main.obj
moc_CharacterManager.cpp
moc_CharacterManager.obj
qrc_qml.cpp
qrc_qml.obj

【问题讨论】:

  • 主应用程序的 DLL 必须存在才能运行。缺少 DLL 时会弹出操作系统级别的错误消息。请参阅免费工具dependencywalker.com 以检查此区域中是否缺少 DLL。
  • 现在,如果您使用某些功能,例如某些文件格式,则需要插件目录 DLL。但我怀疑这不是问题,因为我希望您的应用程序应该会启动并且屏幕上会出现一些东西(因为您没有说您正在获得操作系统级别的错误对话框)。
  • 下一个问题是您已经为 64 位构建了它,您是否要在 32 位窗口上部署它?大多数人如果想要最大消耗量就为 32 位窗口创建/构建,因为它仍然可以在 64 位窗口上工作。
  • 为了帮助解释您所在的位置,请制作一个部署目录的 ZIP 文件(包含 EXE 和所有子文件夹和文件的目录)。然后获取内容的文本列表,unzip -lv myapp.zip 并输入您的问题。
  • msvc*.dll不应该真的被复制到应用程序目录中(这样做可能会说会产生安全问题),每个目标系统最好安装来自微软网站的官方可再发行软件,例如@ 987654324@ 这样 DLL 将获得 Windows 更新修复,并且您的应用程序使用系统上可用的最佳版本。

标签: windows qt deployment


【解决方案1】:

以下是master/bin/Win_x64 中缺少的文件:

bin/Win_x64
├── QtQuick (both dirs are from qt_base_dir/qml/QtQuick)
│   ├── Controls
│   └── Window.2   
├── QtQuick.2 (both files are from qt_base_dir/qml/QtQuick.2)
│   ├── qmldir
│   └── qtquick2plugin.dll
│
│   (Those are only needed for QtWebKit builds)
├── icudt53.dll
├── icuin53.dll
└── icuuc53.dll  

并且可以删除这些文件:

bin/Win_x64
└── platform
    ├── qwindowsd.dll (debug dll)
    └── qwindowsd.pdb (only needed for debugging the debug dll)

部署愉快!

【讨论】:

  • 非常感谢。你怎么知道要这样做?在阅读了您的解决方案后,我在wiki.qt.io/Deploy_an_Application_on_Windows 找到了最终导致该解决方案的说明,但这似乎是一个“删除文件 x 并查看它是否仍然有效”的艰苦过程。这是你做的吗?
  • 在 Windows 上进行了多次 Qt 部署之后,我已经熟悉了主要 Qt 模块的二进制依赖关系。该 wiki 页面的方法是万无一失的,但有点乏味。查看windeployqt.exe (doc.qt.io/qt-5/windows-deployment.html)。它会自动查找并复制所有必要的二进制文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多