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

13

34

I have looked through all of the questions that appear to be related on stack overflow, and none of the solutions seem to help me.

I am building a Qt application with this setup:

  • Windows 7 Professional x64
  • Visual Studio 2012
  • Qt 5.2.0 built with configure -developer-build -debug-and-release -opensource -nomake examples -nomake tests -platform win32-msvc2012 -no-opengl
  • Project uses QtSingleApplication (qt-solutions)
  • Application is a 32 bit application
  • qmake run with the following: -makefile -spec win32-msvc2012
  • .pri uses QMAKE_CXX += /D_USING_V110_SDK71_

I can build and run my program fine on my development machine (noted above); I can also install and run the package from Program Files directory on dev machine.

When I install and run on a Windows Vista machine (multiple machines)

  • VC++ redist 2012 11.0.61030.0 installed
  • VC++ redist 2010 10.0.40219 installed
  • plus 2005, 2008 versions of redist

(also fails on a clean install of Windows 7)

I get:

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

So I followed the instructions and added a .platforms/ directory, and added qwindows.dll (also added qminimal.dll and qoffscreen.dll); I also added libEGL.dll, libGLESv2.dll (even though I shouldn't need them I don't think)

Once I added qoffscreen.dll I now get the additional message: Available platform plugins are: offscreen

If I run through Dependency Walker I get this error listed:

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

and then further down get the:

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.

Any ideas how to fix this dll issue?

Tierza answered 21/1, 2014 at 20:35 Comment(4)
See if this helps - https://mcmap.net/q/112484/-will-ms-visual-studio-2012-work-with-windows-vista. Pay particular attention to - "You will be able to target Vista with VS2012 but not with the public beta. The beta redistributable, confusingly, used to install on Vista but did not work there. ". I surmise from it that if you use the public beta, the redistributable will install, but the program will not run.Sisson
I'm confused about your comment. I am building on Windows 7 x64 machine. Also not using a beta. I'm targeting the application for use on Windows XP, Vista, and so on.Tierza
@Sisson thank you! My issue was with a different release and different compiler (Qt5.6.0, VS 2015), but ultimately using the public release dlls for Qt instead of the public beta dlls solved the issue for me.Confederate
Possible duplicate of Qt5 Static Build yields Failed to load platform plugin "windows"To
T
1

Well I solved my issue, although I'm not sure what the difference is:

I copied every dll from my qt directory into both ./ and ./platforms of my application directory.

The application got past the error, but then crashed.

VERSION.dll was causing the crash (noted in dependency walker), so I removed it from both places.

The Application started up, so I systematically removed all unneeded dll's.

This got me back to the same state I had originally.

I then uninstalled my application and re-installed (with only the ./platforms/qwindows.dll file remaining), application works correctly.

So all I can assume is that I had an incorrect version of qwindows.dll in the platforms directory.

Tierza answered 22/1, 2014 at 18:43 Comment(0)
E
28

The error is caused because the program can't find qwindows.dll

qwindows.dll has to be in a folder named platforms so that the path from your executable to the dll is platforms/qwindows.dll

Whereas this wasn't enough in my case. I had also to add following line at the beginning of my main()

QCoreApplication::addLibraryPath("./");

Then everything worked.

Elixir answered 12/8, 2014 at 14:0 Comment(3)
Great, with addLibraryPath it's worked! Note that you have to call it before constructing QApplicationHewet
Where is this main()? In which file?Consumptive
@Gautam Shrivastav The entry point of your application. The main.cpp file.Elixir
N
11

The application is able to run on the host system, since the Qt bin path is in the system PATH variable.

There is a standard Qt tool for deployment of Qt applications on Windows windeployqt to be able to run the application on target machines that do not have Qt installed.

That tool takes care about Qt DLL dependencies, makes a copy of platforms\qwindows.dll and also it makes a copy of libraries that you cannot detect with the Dependency Walker, since image plugins and some other DLLs are loaded at runtime.

You do not even need to have your Qt bin folder in your environment PATH. The simplest deployment:

  • copy built exe binary to a new folder
  • open cmd console in that folder
  • call windeployqt using the full path (if it is not in the system PATH) and provide your executable, for example:
    c:\Qt\Qt5.2.1\5.2.1\msvc2010_opengl\bin\windeployqt.exe application.exe
    

As a result you have in that folder all needed Qt DLLs to run the application.

The tool windeployqt has various options. It can also take care about deployment of qml related files.

Of course you can have also issues with MSVC redistributables, but those should be deployed separately and installed once per system.

Only some 3rd party libraries should be copied manually if they are used, for example OpenSSL.

Nancienancy answered 22/10, 2015 at 23:9 Comment(2)
This gives me Unable to find the platform plugin.Yakka
one thing to add, windeployqt.exe --release application.exe if you are building a release buildTrafalgar
I
9

I got this issue and how I solved it:

  1. Used dependency walker(http://www.dependencywalker.com/) to see the exact path of the dlls needed. Try it because both QtCreator and QT framework both have the same dlls and you must pinpoint the exact ones used. I copied all dlls needed in the same folder as the app.

  2. I have copied the folder platforms from QT framework /plugins and copied it in the same folder as the app. Now the app comtained also plugin/platform/ folder with all its dlls

  3. And the most important step in my case is to create a file named qt.conf in the same folder as the app . This file should contain the path to the plugins. My qt.conf file contains:

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

Ingravescent answered 10/4, 2014 at 7:57 Comment(2)
Thanks, that worked for me for windows XP SP3. I ended up with these dll's, along with my application, which enabled both DEBUG and RELEASE versions to work (Basic GUI + XML, in this case) : icudt52.dll icuin52.dll icuuc52.dll msvcp120.dll msvcp120d.dll msvcr120.dll msvcr120d.dll Qt5Core.dll Qt5Cored.dll Qt5Gui.dll Qt5Guid.dll Qt5Widgets.dll Qt5Widgetsd.dll Qt5Xml.dll Qt5Xmld.dll vccorlib120.dll vccorlib120d.dll plugins\platforms\ qminimal.dll qminimald.dll qoffscreen.dll qoffscreend.dll qwindows.dll qwindowsd.dllDemanding
I was forced to add both libGLESv2.dll and libEGL.dll to above list to avoid this problem on qt5.3.1.Arlettaarlette
E
5

I had the same issue "Application failed to start because it could not find or load the QT platform plugin "windows" I fixed this by copying below files to the app.exe (my app executable) folder,

Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll and a "platforms" directory with qminimal.dll, qoffscreen.dll, qwindows.dll.

enter image description here

enter image description here

I hope this will help someone

Eleneeleni answered 1/3, 2017 at 9:50 Comment(0)
L
4

Note this issue can also be caused if the search path for qwindows.dll that is encoded in your app includes the path where you installed Qt. Consider the following scenario:

  1. I install Qt to c:\Qt\...
  2. I develop an app and deploy it correctly somewhere else.
  3. It runs on any computer properly because it includes qwindows.dll in a subdirectory.
  4. I upgrade my local Qt to a new version.
  5. I try to run my app again.

The result is this error, because the qwindows.dll in c:\Qt\... is found before the one in its local directory and it is incompatible with it. Very annoying.

A solution is to place a file qt.conf in the same directory as your exe file. I don't know how to avoid this. If you used the tool windeployqt.exe to deploy your app, so you have a subdirectory called platforms, then this is sufficient:

[Paths]
Plugins=.
Letitialetizia answered 3/6, 2015 at 10:15 Comment(0)
S
3

For me, I needed to set QT_QPA_PLATFORM_PLUGIN_PATH to the platforms directory and then it worked.

For what it's worth, this solution was also mentioned on GitHub.

Sprightly answered 20/6, 2016 at 8:54 Comment(0)
L
2

For the people who have this problem in the future - I have a dirty little hack, worked for me. Try at your own risk.

Follow all the steps in Initial deployment (Quick and dirty) [http://wiki.qt.io/Deploy_an_Application_on_Windows]

  1. Close Qt Creator.
  2. Copy the following into C:\Deployment\ The release version of MyApp.exe All the .dll files from C:\Qt\5.2.1\mingw48_32\bin\ All the folders from C:\Qt\5.2.1\mingw48_32\plugins\
  3. (If you used QML) All the folders from C:\Qt\5.2.1\mingw48_32\qml\ Rename C:\Qt\ to C:\QtHidden\ (This turns your PC into a clean environment, just like one that doesn't have Qt installed).
  4. Launch C:\Deployment\MyApp.exe.

Now for the hack -

  1. Duplicate your folder for safety
  2. If your file was in /cat/Deployment, go to /cat
  3. Now, delete the Deployment folder while the .exe is still running.
  4. It will tell you that it cannot delete certain files, so say Skip(or skip all)
  5. What you're left with is the list of all the .dll files that your .exe was actually using and could not delete: the list of all the files and only the files that you need to keep.

You can close the .exe file now. To check whether it is deploying okay, go into the folder where you installed it, say C:/Qt and rename it to C:/NotQt (basically make Qt invisible to the system). If it works now, it will deploy on other systems more often than not.

Logia answered 30/6, 2016 at 15:9 Comment(0)
T
1

Well I solved my issue, although I'm not sure what the difference is:

I copied every dll from my qt directory into both ./ and ./platforms of my application directory.

The application got past the error, but then crashed.

VERSION.dll was causing the crash (noted in dependency walker), so I removed it from both places.

The Application started up, so I systematically removed all unneeded dll's.

This got me back to the same state I had originally.

I then uninstalled my application and re-installed (with only the ./platforms/qwindows.dll file remaining), application works correctly.

So all I can assume is that I had an incorrect version of qwindows.dll in the platforms directory.

Tierza answered 22/1, 2014 at 18:43 Comment(0)
C
1

I got the same issue: 1. it can run in VS2010; 2. it can run in a folder with files as: app.exe \platforms\qwindows.dll ...

  1. but it failed to load qwindows on a clean machine with same OS as the developing one.

Solved simply by move the platform folder to plugins: app.exe plugins\platforms\qwindows.dll


plus: qwindows.dll can be renamed as any you like as it is queried by an plugin interafce: qt_plugin_query_metadata()

Cacogenics answered 13/5, 2014 at 7:43 Comment(0)
R
1

It's missing qwindows.dll, which normally should be in platforms, unless you add:

QCoreApplication::addLibraryPath("<yourpath>");

If you don't do this btw, and put your qwindows.dll somewhere else, Qt will search your PATH for the DLL, which may take a LOT of time (10s - several minutes)!

Rondelet answered 5/6, 2015 at 15:21 Comment(0)
O
1

I fixed this by placing qt.conf in my application's exe folder:

[Paths]
Prefix=C:/Qt/Qt5.11.2/5.11.2/msvc2017

Where:

  1. I have installed a custom Qt kit in C:\Qt\Qt5.11.2\5.11.2\msvc2017
  2. qt.conf informs the app where the custom kit via the Prefix property. Note use forward slashes not backslashes (!)
  3. And, optionally, the Qt kit's bin folder is included in my PATH environment variable

Defining Prefix in your qt.conf file allows it to find the qwindows.dll platform plugin when your app starts.

Ornelas answered 25/10, 2018 at 12:20 Comment(0)
S
0

Tried all the above - turned out for me it was simply because I didn't have the main Qt dlls in the apps folder

  • Qt5Core.dll
  • Qt5Widgets.dll
  • etc
Sectarianize answered 26/7, 2016 at 13:34 Comment(0)
R
0

You need to add environmental variable QT_QPA_PLATFORM_PLUGIN_PATH to the system which points to the platforms directory in QT plugins. In my case, I was using Anaconda and PySide2. Therefore my directory path was C:\ProgramData\Anaconda3\envs\cv\Lib\site-packages\PySide2\plugins. This fixes the issue for every QT project. Otherwise, you have copy platforms directory to every QT project.

Regimentals answered 20/6, 2019 at 17:40 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.