【问题标题】:Application deployed with QT5 libraries does not start on Windows 7使用 QT5 库部署的应用程序无法在 Windows 7 上启动
【发布时间】:2012-12-18 02:53:10
【问题描述】:

最近我们一直在将基于 QT 的 Windows 应用程序从 QT 4.8 迁移到 QT 5,但我们遇到了部署问题。请注意,我们的应用程序没有改变,我们只是使用新的 QT5 框架构建它。经过一番努力,我们用基于 VS2010 的 QT5 库构建了它;我成功地从 Qt Creator 运行了该应用程序。

正如我们对 QT4 所做的那样,我们在安装程序中包含了一组必需的 QT 库。

在我们的测试阶段,当我们在干净的机器上安装我们的 QT5 应用程序时;它不会启动。应用程序不仅没有启动,而且没有输出任何错误。

我们通过依赖检查器运行应用程序;并且根本没有缺少库依赖项。

【问题讨论】:

  • 我在 Windows XP 上也遇到了同样的问题,其中dependency walker 报告了 3 个不相关的缺失库。我正在部署基于 MinGW 的应用程序。

标签: qt qt5


【解决方案1】:

经过几天的搜索没有任何进展,我们偶然发现了一个 QT 错误:

https://bugreports.qt.io/browse/QTBUG-28766

使用 QT5,除了预期的 QT 库之外,还有 msvcr100.dll 和 msvcp100.dll;事实证明,您必须通过以下方式发送您的应用程序:

platforms/qminimal.dll
platforms/qwindows.dll

也是。在您的本地 QT5 库 install @: \Qt5.0.0\5.0.0\msvc2010\plugins\platforms 中找到 我到处搜索,但无法在他们的文档中找到此信息。

【讨论】:

  • depends.exe 会对您有很大帮助,如果您静态链接运行时,也不需要 msvc*.dll - 注意您说depends没有帮助,在这种情况下 procmon.exe 会有
  • @Aki,你知道它是如何在开发机器上找到qwindows.dll的吗?似乎要求 QtCore.dll (和其他)与 .exe 文件位于同一目录中。但不知何故,它不需要 qwindows.dll 位于 platforms 子文件夹中。我没有在系统变量或注册表中找到指向 C:/Qt5.0.0/... 的任何内容。
  • 不确定它是如何找到 dll 的。 FWIW:在我的开发盒上,我从 QtCreator 运行我的程序没有任何问题。当 QTCreator 执行我的应用程序时,它会为其设置正确的环境以找到必要的 dll(QT 库和 qminimal.dll ......)。顺便说一句,这一切都是自动完成的,我从来不需要设置任何东西。希望这会有所帮助...
  • 这正是我们部署 Windows 应用程序的方式。平台子目录必须在那里。
  • platforms/qminimal.dll 并不总是必需的。 qwindows.dll 是。
【解决方案2】:

似乎与应用程序位于同一目录中的空 qt.conf 导致在 Windows 7 上启动 Qt5 应用程序时出现问题。请尝试将其删除。

【讨论】:

    【解决方案3】:

    Qt 平台 dll 位于“qtbase”的“plugins”文件夹中: C:\Qt\5.0.0\qtbase\plugins\platforms

    【讨论】:

      【解决方案4】:

      让我运行独立的“Hello World”gui 应用程序(Qt sdk 5.0.1 mingw,Win7 x64)。我需要将下一个文件添加到程序目录:

      1. platforms/qwindows.dll
      2. D3DCompiler_43.dll
      3. icudt49.dll
      4. icuin49.dll
      5. icuuc49.dll
      6. libEGL.dll
      7. libgcc_s_sjlj-1.dll
      8. libGLESv2.dll
      9. libstdc++-6.dll
      10. libwinpthread-1.dll
      11. Qt5Core.dll
      12. Qt5Gui.dll
      13. Qt5Widgets.dll

      qt 5.5 doc 上提供 windows 的完整部署信息

      【讨论】:

      • 非常感谢这个列表,不幸的是 Qt5 应用程序没有告诉我究竟缺少哪个库,只是报告了难以理解的错误。
      【解决方案5】:

      是的,很好看。我在使用时遇到了同样的部署问题 qt 5.0.2。

      同样在应用程序中安装了带有这两个 dll 的平台文件夹 文件夹,vista 和 win7 上的部署现在可以工作了。

      Dependency walker 在这里没有帮助,因为它没有 通知 qwindows.dll 或 qminimal.dll 作为所需的 dll。

      我的 Qt 安装中的平台 dll 位于 \Qt\5.0.2\mingw47_32\plugins\platforms.

      【讨论】:

        【解决方案6】:

        记事本教程,win7 & qt5.1.1

        部署步骤是:

        * 将构建模式更改为发布,而不是调试, * 建造, * 在某处创建一个输出文件夹 例如桌面/记事本/ * * 复制文件到输出文件夹 文件清单: * 来自“workspace_home/build-notepad-xxx-Release/release” *记事本.exe * 来自“qt_home/5.1.1/msvc2010/bin” * icudt51.dll * icuin51.dll * icuuc51.dll * libEGL.dll * libGLESv2.dll * Qt5Core.dll * Qt5Gui.dll * Qt5Widgets.dll * * 来自“qt_home/5.1.1/msvc2010/plugins/platforms” *platforms/(需要在输出文件夹中创建这个子文件夹) * qwindows.dll * * * * 运行 .exe 文件,确保它工作正常, * * 好的 *

        【讨论】:

          【解决方案7】:

          更好的选择是使用:windeployqt.exe。此工具可解决您的 application.exe 的所有依赖项。

          【讨论】:

          • 是的,我不知道为什么在 QT wiki 的部署页面上的 BIG FONT RED 中没有提到这个!
          • 很抱歉,但事实并非如此。如果您开发一个 qml 应用程序,它会丢失所有 qml 所需的文件(QtQml、QtQuick、QtQuick.2)
          • @RvdK windeployqt 接受 --qmldir <directory> 命令行参数来解决 QML 依赖关系。 (见windeployqt -helpdoc.qt.io/qt-5/windows-deployment.html
          【解决方案8】:

          我使用了 QMediaPlayer 和 QMediaPlaylist 的实例,我的应用程序将不再启动,并出现以下错误:此应用程序无法启动,因为它无法找到或加载 Qt 平台插件“windows”。重新安装应用程序可能会解决此问题。

          在花了 4 天的时间试图弄清楚发生了什么之后,我们发现 Qt5Core.dll 中有一个硬编码的路径来加载插件,尤其是文件 wmfengine.dll。确保你编译 Qt5Core 时没有这个硬编码路径 (:\Qt\5.5\msvc2010)。

          Qt5Core.dll 中的硬编码路径无法加载插件 wmfengine.dll

          【讨论】:

          • 使用 Windows 部署工具 (windeployqt) 还可以生成一个新的 QT5Core.dll,它将删除硬编码的路径。它将在您的应用目录中。
          猜你喜欢
          • 1970-01-01
          • 2016-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多