【发布时间】: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