应用程序无法启动,因为它无法找到或加载QT平台插件"windows"

gol*_*log 27 c++ dll qt platform

我查看了所有与堆栈溢出相关的问题,但没有一个解决方案对我有帮助.

我正在使用此设置构建Qt应用程序:

  • Windows 7专业版x64
  • Visual Studio 2012
  • Qt 5.2.0内置 configure -developer-build -debug-and-release -opensource -nomake examples -nomake tests -platform win32-msvc2012 -no-opengl
  • 项目使用QtSingleApplication(qt-solutions)
  • 应用程序是一个32位应用程序
  • qmake使用以下命令运行:-makefile -spec win32-msvc2012
  • .pri使用 QMAKE_CXX += /D_USING_V110_SDK71_

我可以在我的开发机器上构建和运行我的程序(如上所述); 我也可以在dev机器上的Program Files目录下安装和运行包.

当我在Windows Vista计算机上安装并运行时(多台计算机)

  • 安装VC++ redist 2012 11.0.61030.0
  • 安装VC++ redist 2010 10.0.40219
  • 加上2005年,2008版的redist

(在Windows 7的全新安装上也失败了)

我明白了:

Application failed to start because it could not find or load the QT platform plugin "windows"

所以我按照说明添加了.platforms /目录,并添加了qwindows.dll(还添加了qminimal.dll和qoffscreen.dll); 我还添加了libEGL.dll,libGLESv2.dll(即使我不应该需要它们,我不认为)

一旦我添加了qoffscreen.dll,我现在得到了额外的消息: Available platform plugins are: offscreen

如果我通过Dependency Walker运行,我会列出以下错误:

GetProcAddress(0x76CA0000 [KERNEL32.DLL], "GetCurrentPackageId") called from "MSVCR110.DLL" at address 0x6AC6FDFA and returned NULL. Error: The specified procedure could not be found (127).
Run Code Online (Sandbox Code Playgroud)

然后进一步得到:

GetProcAddress(0x745A0000 [UXTHEME.DLL], "BufferedPaintUnInit") called from "COMCTL32.DLL" at address 0x745FFBF8 and returned 0x745AE18C.
This application failed to start because it could not find or load the Qt platform plugin "windows".

Available platform plugins are: offscreen.

Reinstalling the application may fix this problem.
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决这个DLL问题?

Jan*_*itz 25

该错误是由于程序找不到引起的 qwindows.dll

qwindows.dll必须位于一个名为的文件夹中,platforms以便从可执行文件到dll的路径platforms/qwindows.dll

虽然这在我的情况下是不够的.我还要在main()的开头添加以下行

QCoreApplication::addLibraryPath("./");
Run Code Online (Sandbox Code Playgroud)

一切顺利.


Ore*_*era 10

应用程序能够在主机系统上运行,因为Qt bin路径在系统PATH变量中.

有一个标准的Qt工具,用于在Windows上部署Qt应用程序,windeployqt以便能够在未安装Qt的目标计算机上运行应用程序.

该工具负责Qt DLL依赖项,制作副本,platforms\qwindows.dll并且它还使用Dependency Walker无法检测到的库副本,因为图像插件和其他一些DLL在运行时加载.

您甚至不需要bin在您的环境中拥有Qt 文件夹PATH.最简单的部署:

  • 将内置exe二进制文件复制到新文件夹
  • cmd在该文件夹中打开控制台
  • windeployqt使用完整路径调用(如果它不在系统中PATH)并提供可执行文件,例如:
    c:\Qt\Qt5.2.1\5.2.1\msvc2010_opengl\bin\windeployqt.exe application.exe
    
    Run Code Online (Sandbox Code Playgroud)

因此,您在该文件夹中拥有运行应用程序所需的所有Qt DLL.

该工具windeployqt有多种选择.它还可以处理qml相关文件的部署.

当然,您也可能遇到MSVC可再发行组件的问题,但这些应该单独部署并在每个系统上安装一次.

如果使用它们,则只应手动复制某些第三方库,例如OpenSSL.

  • 这让我无法找到平台插件。 (2认同)

Luc*_*ian 9

我遇到了这个问题以及我是如何解决的:

  1. 使用依赖walker(http://www.dependencywalker.com/)查看所需dll的确切路径.试试看,因为QtCreator和QT框架都有相同的dll,你必须确定使用的确切数据.我复制了与应用程序在同一文件夹中所需的所有dll.

  2. 我已经从QT框架/插件中复制了文件夹平台,并将其复制到与应用程序相同的文件夹中.现在,该应用程序还包含其所有dll的插件/平台/文件夹

  3. 在我的情况下,最重要的一步是在与应用程序相同的文件夹中创建一个名为qt.conf的文件.该文件应包含插件的路径.我的qt.conf文件包含:

    [Paths]
    Libraries = ../lib/qtcreator
    Plugins = plugins
    Imports = imports
    Qml2Imports = qml


小智 6

我遇到了同样的问题:“应用程序无法启动,因为它无法找到或加载QT平台插件“ windows”,因此无法启动,我通过将以下文件复制到app.exe(我的应用程序可执行文件)文件夹来解决此问题,

Qt5Core.dll,Qt5Gui.dll,Qt5Widgets.dll和带有qminimal.dll,qoffscreen.dll,qwindows.dll的“平台”目录。

在此处输入图片说明

在此处输入图片说明

我希望这会帮助某人


gol*_*log 1

好吧,我解决了我的问题,尽管我不确定有什么区别:

我将 qt 目录中的每个 dll 复制到应用程序目录的 ./ 和 ./platforms 中。

该应用程序克服了错误,但随后崩溃了。

VERSION.dll 导致崩溃(在依赖项步行器中注明),因此我从两个地方都将其删除。

应用程序启动了,所以我系统地删除了所有不需要的 dll。

这让我回到了原来的状态。

然后我卸载了我的应用程序并重新安装(仅剩下 ./platforms/qwindows.dll 文件),应用程序正常工作。

所以我只能假设平台目录中的 qwindows.dll 版本不正确。