【问题标题】:Qt5 Application Does Not RunQt5 应用程序不运行
【发布时间】:2014-12-10 19:39:37
【问题描述】:

我使用 Qt 5(使用 Visual Studio '12 编译)创建了一个应用程序。它可以在我的机器上运行。

但是,当我尝试在另一台机器上运行它时它不起作用。我通过 cmd 收集的输出产生了一个空文件。

目录结构如下:

  • myapp.exe
  • icudt52.dll
  • icuin52.dll
  • icuuc52.dll
  • libEGL.dll
  • libGLESv2.dll
  • msvcp120.dll
  • msvcr120.dll
  • Qt5Core.dll
  • Qt5Gui.dll
  • platforms/qminimal.dll
  • platforms/qwindows.dll

我找到的最相关的帖子是Application deployed with QT5 libraries does not start on Windows 7 - 但解决方案(包括 qwindows.dll 和 qminimal.dll)不起作用。

有什么想法吗?

【问题讨论】:

标签: c++ qt dll


【解决方案1】:

当您在 Qt Creator 之外双击您的 exe 时,Windows 将报告许多启动错误。您似乎已经包含了大部分或全部这些内容。

由于您的 exe 搜索了 LibraryPaths,您的开发机器通常不会在启动和运行其 qt 插件时遇到问题。 http://qt-project.org/doc/qt-5/qcoreapplication.html#libraryPaths

Dependency Walker 将完成这项工作并向您展示您需要知道的内容,但输出非常复杂,可能难以破译。

我发现找出我在 Windows 上运行时使用的 Qt 插件 dll 的最简单方法是执行以下操作:

  1. 退出 Qt Creator。

  2. 在资源管理器中打开与 Qt 一起使用的编译器的安装文件夹。例如:

    C:/Qt/5.3/msvc2010_opengl/
    
  3. 就地创建plugins 文件夹的副本(Copy of plugins 文件夹与plugins 位于同一路径,因此在本例中其父级为msvc2010_opengl)。

  1. 在另一个资源管理器窗口中,在您的开发计算机上打开您的 exe(Qt 程序)。对您的程序进行最低限度的测试,以确保主要功能正常工作。 (在实例化使用它们的 QObject 之前,许多运行时插件不会被加载)。

  2. 删除Qt路径中的plugins文件夹。

  3. Windows 将锁定您的 exe 正在使用的所有 dll,并阻止您删除许多 dll。点击跳过所有不可删除的文件夹和文件。

  1. 现在进入您之前无法删除的每个文件夹,并尝试删除每个文件夹中的所有单个 dll。点击跳过所有不可删除的 dll。

  2. 现在,当您全部完成后,您会看到一个插件文件夹的骨架,只显示您的应用程序正在使用的 dll。

  3. 它可能包括以下文件夹:accessibilityplatformsimageformats 等等,具体取决于您在 .pro 文件中包含的内容。

  4. 关闭您的 exe。

  5. 将精简后的插件文件夹的内容复制到您的 exe 旁边。

  6. 恢复插件文件夹的备份(从 Qt 路径中删除精简的插件文件夹并恢复 Copy of plugins)。

  7. 现在您应该可以开始了。在非开发机器上测试。

VS C++ 运行时注意事项

在某些机器上,当使用 MSVC 部署 Qt 时,msvcrXXX.dll 与系统其余部分使用的不匹配。我们没有部署 msvcrXXX.dll,而是在我们办公室的安装程序中,包括 Microsoft C++ Redistributable Installer 并在安装脚本中运行它。在一些机器上,他们损坏了 Redistributables,我们不得不强制安装 Redistributables 来修复我们有时会遇到的“Referral from server”错误。

您可以在此处Latest Supported Visual C++ Downloads 找到最新的 MSVC Redistributables 安装程序。

希望对您有所帮助。

【讨论】:

  • 感谢您的出色回答!有用。显然,我的问题是我使用了错误的 qwindows.dll。
  • 有一天我会编写这个脚本,或者在 Qt 中制作一个工具来完成这些步骤并制作一个 Qt Creator 插件或其他东西,以便更容易在 Windows 上部署。几年前第一次弄清楚这一点是非常痛苦的。祝你好运。
【解决方案2】:

您必须在手动复制 dll 文件之前部署您的应用程序。

要在 Windows 上部署 Qt 应用程序,您可以使用 windeployqt,它位于:

/bin/windeployqt

示例批处理脚本可能适用于部署您的 Qt 应用程序(使用 PowerShell 或 cmd 运行):

C:\Qt\Qt5.x.x\5.x.x\MSVCx_x\bin\windeployqt <APP_PATH>/myapp.exe
  1. 部署您的应用后,尝试运行您的 myapp.exe 并注意缺少哪些 dll 文件。

  2. 将所需的 dll 文件从 QTDIR/bin 复制/粘贴到您的

有关部署的更多信息:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 2021-06-19
    • 2017-04-17
    • 1970-01-01
    相关资源
    最近更新 更多