我查看了所有与堆栈溢出相关的问题,但没有一个解决方案似乎能帮助我。
我正在使用此设置构建Qt应用程序:
configure -developer-build -debug-and-release -opensource -nomake examples -nomake tests -platform win32-msvc2012 -no-opengl
QMAKE_CXX += /D_USING_V110_SDK71_
我可以在我的开发机器上构建和运行我的程序(如上所述);我也可以在dev机器上的Program Files目录下安装和运行包。
当我在Windows Vista计算机上安装并运行时(多台计算机)
(在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).
然后进一步得到:
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.
如何修复此dll问题的任何想法?
答案 0 :(得分:23)
导致错误是因为程序找不到qwindows.dll
qwindows.dll
必须位于名为platforms
的文件夹中,以便从可执行文件到dll的路径为platforms/qwindows.dll
虽然这在我的案例中还不够。我还要在main()
的开头添加以下行QCoreApplication::addLibraryPath("./");
然后一切正常。
答案 1 :(得分:9)
我遇到了这个问题以及我是如何解决的:
使用了依赖性walker(http://www.dependencywalker.com/)来查看所需dll的确切路径。试试看,因为QtCreator和QT框架都有相同的dll,你必须确定使用的确切数据。 我复制了与应用程序在同一文件夹中所需的所有dll。
我已经从QT框架/插件中复制了文件夹平台,并将其复制到与应用程序相同的文件夹中。现在,该应用程序还包含plugin / platform /文件夹及其所有dll
在我的案例中,最重要的一步是在与应用程序相同的文件夹中创建一个名为qt.conf的文件。该文件应包含插件的路径。我的qt.conf文件包含:
[路径]
库= .. / LIB / qtcreator
插件=插件
进口=进口
Qml2Imports = QML
答案 2 :(得分:8)
应用程序能够在主机系统上运行,因为Qt bin
路径位于系统PATH
变量中。
有一个标准的Qt工具可以在Windows windeployqt
上部署Qt应用程序,以便能够在没有安装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
因此,您在该文件夹中拥有运行应用程序所需的所有Qt DLL。
工具windeployqt
有多种选择。它还可以处理qml
相关文件的部署。
当然,您也可能遇到MSVC可再发行组件的问题,但这些问题应单独部署并在每个系统上安装一次。
如果使用它们,则只能手动复制某些第三方库,例如OpenSSL。
答案 3 :(得分:5)
我有同样的问题“应用程序无法启动,因为它无法找到或加载QT平台插件”windows“ 我通过将下面的文件复制到app.exe(我的应用程序可执行文件)文件夹
来修复此问题Qt5Core.dll,Qt5Gui.dll,Qt5Widgets.dll以及带有qminimal.dll,qoffscreen.dll,qwindows.dll的“平台”目录。
我希望这能帮到某人
答案 4 :(得分:3)
请注意,如果您应用中编码的qwindows.dll
的搜索路径包含您安装Qt的路径,则会导致此问题 。请考虑以下情形:
c:\Qt\...
qwindows.dll
。结果是此错误,因为qwindows.dll
中的c:\Qt\...
在之前找到在其本地目录中的,并且与它不兼容。非常烦人。
解决方案是将文件qt.conf
放在与exe文件相同的目录中。我不知道如何避免这种情况。如果您使用工具windeployqt.exe
来部署您的应用,那么您有一个名为platforms
的子目录,那么这就足够了:
[Paths]
Plugins=.
答案 5 :(得分:2)
对于将来遇到这个问题的人 - 我有一个肮脏的小黑客,为我工作。请自担风险。
按照初始部署中的所有步骤(快速和脏)[http://wiki.qt.io/Deploy_an_Application_on_Windows]
现在是黑客 -
您现在可以关闭.exe文件。 要检查它是否正常部署,请进入安装它的文件夹,例如C:/ Qt并将其重命名为C:/ NotQt(基本上使Qt对系统不可见)。 如果它现在有效,它将经常部署在其他系统上。
答案 6 :(得分:1)
我解决了我的问题,虽然我不确定区别是什么:
我将qt目录中的每个dll复制到我的应用程序目录的./和./platforms中。
应用程序已经超过了错误,但随后崩溃了。
VERSION.dll导致崩溃(在依赖者walker中注明),所以我从两个地方删除了它。
应用程序已启动,因此我系统地删除了所有不需要的dll。
这让我回到原来的状态。
然后我卸载了我的应用程序并重新安装(只剩下./platforms/qwindows.dll文件),应用程序正常工作。
所以我可以假设我在平台目录中有一个不正确版本的qwindows.dll。
答案 7 :(得分:1)
我遇到了同样的问题: 1.它可以在VS2010中运行; 2.它可以在包含文件的文件夹中运行: APP.EXE \平台\ qwindows.dll ...
只需将平台文件夹移动到插件即可解决: APP.EXE 插件\平台\ qwindows.dll
plus:qwindows.dll可以重命名为任何你喜欢的插件interfce查询: qt_plugin_query_metadata()
答案 8 :(得分:1)
它缺少qwindows.dll,它通常应该在平台上,除非你添加:
QCoreApplication::addLibraryPath("<yourpath>");
如果你不这样做,并将qwindows.dll放在其他地方,Qt将在你的PATH中搜索DLL,这可能需要很长时间(10s - 几分钟)!
答案 9 :(得分:1)
对我来说,我needed to set QT_QPA_PLATFORM_PLUGIN_PATH
到平台目录,然后就可以了。
对于它的价值,这个解决方案也是mentioned on GitHub。
答案 10 :(得分:0)
尝试了以上所有内容 - 结果对我来说,这只是因为我在Qt
文件夹中没有主apps
个dll
答案 11 :(得分:0)
我通过将qt.conf
放在应用程序的exe文件夹中来解决此问题:
[Paths]
Prefix=C:/Qt/Qt5.11.2/5.11.2/msvc2017
位置:
C:\Qt\Qt5.11.2\5.11.2\msvc2017
中安装了自定义Qt工具包qt.conf
通过Prefix
属性通知应用程序定制工具包的位置。请注意使用正斜杠而不是反斜杠(!)PATH
环境变量中还包含了Qt工具箱的bin文件夹在Prefix
文件中定义qt.conf
时,它可以在应用启动时找到qwindows.dll
平台插件。
答案 12 :(得分:0)
您需要向系统添加环境变量QT_QPA_PLATFORM_PLUGIN_PATH
,该环境变量指向QT插件中的platforms目录。就我而言,我正在使用Anaconda和PySide2。因此,我的目录路径为C:\ProgramData\Anaconda3\envs\cv\Lib\site-packages\PySide2\plugins
。这解决了每个QT项目的问题。否则,您将复制平台目录到每个QT项目。