La aplicación no pudo iniciarse porque no pudo encontrar o cargar el complemento de la plataforma QT “ventanas”

He revisado todas las preguntas que parecen estar relacionadas con el desbordamiento de la stack, y ninguna de las soluciones parece ayudarme.

Estoy construyendo una aplicación Qt con esta configuración:

  • Windows 7 Professional x64
  • Visual Studio 2012
  • Qt 5.2.0 creado con configure -developer-build -debug-and-release -opensource -nomake examples -nomake tests -platform win32-msvc2012 -no-opengl
  • El proyecto usa QtSingleApplication (qt-solutions)
  • La aplicación es una aplicación de 32 bits
  • qmake ejecuta con lo siguiente: -makefile -spec win32-msvc2012
  • .pri usa QMAKE_CXX += /D_USING_V110_SDK71_

Puedo construir y ejecutar bien mi progtwig en mi máquina de desarrollo (señalado arriba); También puedo instalar y ejecutar el paquete desde el directorio Program Files en la máquina dev.

Cuando instalo y corro en una máquina con Windows Vista (múltiples máquinas)

  • VC ++ redist 2012 11.0.61030.0 instalado
  • VC ++ redist 2010 10.0.40219 instalado
  • más 2005, 2008 versiones de redist

(también falla en una instalación limpia de Windows 7)

Yo obtengo:

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

Así que seguí las instrucciones, agregué un directorio .platforms / y agregué qwindows.dll (también agregué qminimal.dll y qoffscreen.dll); También agregué libEGL.dll, libGLESv2.dll (aunque no debería necesitarlos, no creo)

Una vez que agregué qoffscreen.dll ahora recibo el mensaje adicional: Available platform plugins are: offscreen

Si me topo con Dependency Walker aparece este error:

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

y luego más abajo obtener el:

 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. 

¿Alguna idea de cómo solucionar este problema de dll?

El error se debe a que el progtwig no puede encontrar qwindows.dll

qwindows.dll tiene que estar en una carpeta llamada platforms para que la ruta desde su ejecutable a la dll sea platforms/qwindows.dll

Mientras que esto no fue suficiente en mi caso. También tuve que agregar la siguiente línea al comienzo de mi principal ()

 QCoreApplication::addLibraryPath("./"); 

Entonces todo funcionó.

Tengo este problema y cómo lo resolví:

  1. Use el cajero de dependencias ( http://www.dependencywalker.com/ ) para ver la ruta exacta de los dlls necesarios. Pruébalo porque tanto QtCreator como QT Framework tienen los mismos dlls y debes identificar exactamente los que se usan. Copié todos los dlls necesarios en la misma carpeta que la aplicación.

  2. He copiado las plataformas de carpetas de los marcos / complementos de QT y las copié en la misma carpeta que la aplicación. Ahora la aplicación también incluía plugin / platform / folder con todas sus dlls

  3. Y el paso más importante en mi caso es crear un archivo llamado qt.conf en la misma carpeta que la aplicación. Este archivo debe contener la ruta a los complementos. Mi archivo qt.conf contiene:

    [Caminos]
    Bibliotecas = .. / lib / qtcreator
    Complementos = complementos
    Importaciones = importaciones
    Qml2Imports = qml

La aplicación puede ejecutarse en el sistema host, ya que la ruta del bin Qt está en la variable PATH del sistema.

Existe una herramienta Qt estándar para el despliegue de aplicaciones Qt en Windows windeployqt para poder ejecutar la aplicación en máquinas objective que no tienen instalado Qt.

Esa herramienta se ocupa de las dependencias Qt DLL, hace una copia de las platforms\qwindows.dll y también hace una copia de las bibliotecas que no puede detectar con Dependency Walker , ya que los complementos de imágenes y algunas otras DLL se cargan en tiempo de ejecución.

Ni siquiera necesita tener su carpeta Qt bin en su entorno PATH . La implementación más simple:

  • copia el binario exe ejecutado a una nueva carpeta
  • abra la consola de cmd en esa carpeta
  • llame a windeployqt utilizando la ruta completa (si no está en el sistema PATH ) y proporcione su ejecutable, por ejemplo:
     c:\Qt\Qt5.2.1\5.2.1\msvc2010_opengl\bin\windeployqt.exe application.exe 

Como resultado, tiene en esa carpeta todas las Qt DLL necesarias para ejecutar la aplicación.

La herramienta windeployqt tiene varias opciones. También puede ocuparse de la implementación de archivos relacionados con qml .

Por supuesto, también puede tener problemas con los redistribuibles de MSVC, pero estos deben implementarse por separado e instalarse una vez por sistema.

Solo algunas bibliotecas de terceros deben copiarse manualmente si se usan, por ejemplo, OpenSSL.

Tenga en cuenta que este problema también puede deberse a que la ruta de búsqueda de qwindows.dll codificada en su aplicación incluya la ruta donde instaló Qt. Considere la siguiente situación:

  1. Instalo Qt en c:\Qt\...
  2. Desarrollo una aplicación y la despliego correctamente en otro lugar.
  3. Se ejecuta correctamente en cualquier computadora porque incluye qwindows.dll en un subdirectorio.
  4. Actualizo mi Qt local a una nueva versión.
  5. Intento ejecutar mi aplicación de nuevo.

El resultado es este error, porque qwindows.dll en c:\Qt\... se encuentra antes que el de su directorio local y no es compatible con él. Muy molesto.

Una solución es colocar un archivo qt.conf en el mismo directorio que su archivo exe. No sé cómo evitar esto. Si utilizó la herramienta windeployqt.exe para implementar su aplicación, entonces tiene un subdirectorio llamado platforms , entonces esto es suficiente:

 [Paths] Plugins=. 

Tuve el mismo problema “La aplicación no se pudo iniciar porque no pudo encontrar o cargar el complemento de la plataforma QT” windows “Lo solucioné copiando los archivos siguientes en la carpeta app.exe (mi aplicación ejecutable),

Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll y un directorio de “plataformas” con qminimal.dll, qoffscreen.dll, qwindows.dll.

enter image description here

enter image description here

Espero que esto ayude a alguien

Para las personas que tienen este problema en el futuro, tengo un pequeño truco sucio, funcionó para mí. Pruebe bajo su propio riesgo.

Siga todos los pasos en la implementación inicial (rápida y sucia) [ http://wiki.qt.io/Deploy_an_Application_on_Windows%5D

  1. Cerrar Qt Creator.
  2. Copie lo siguiente en C: \ Deployment \ La versión de lanzamiento de MyApp.exe Todos los archivos .dll de C: \ Qt \ 5.2.1 \ mingw48_32 \ bin \ Todas las carpetas de C: \ Qt \ 5.2.1 \ mingw48_32 \ complementos \
  3. (Si usó QML) Todas las carpetas de C: \ Qt \ 5.2.1 \ mingw48_32 \ qml \ Rename C: \ Qt \ to C: \ QtHidden \ (Esto convierte su PC en un entorno limpio, como uno que no lo hace no tengo Qt instalado).
  4. Inicie C: \ Deployment \ MyApp.exe.

Ahora para el hack –

  1. Duplique su carpeta por seguridad
  2. Si su archivo estaba en / cat / Deployment, vaya a / cat
  3. Ahora, elimine la carpeta Deployment mientras el .exe aún se está ejecutando.
  4. Le dirá que no puede eliminar ciertos archivos, por lo que debe decir Omitir (u omitir todo)
  5. Lo único que le queda es la lista de todos los archivos .dll que su .exe realmente estaba usando y que no pudo eliminar: la lista de todos los archivos y solo los archivos que necesita conservar.

Puede cerrar el archivo .exe ahora. Para comprobar si se está implementando correctamente, vaya a la carpeta donde lo instaló, digamos C: / Qt y cámbiele el nombre a C: / NotQt (básicamente haga que Qt sea invisible para el sistema). Si funciona ahora, se implementará en otros sistemas más de las veces.

Bueno, resolví mi problema, aunque no estoy seguro de cuál es la diferencia:

Copié cada dll de mi directorio qt en ./ y ./plataformas de mi directorio de aplicaciones.

La aplicación superó el error, pero luego se bloqueó.

VERSION.dll estaba causando el locking (se observó en el caminante de dependencia), por lo que lo eliminé de ambos lugares.

La aplicación se inició, así que eliminé sistemáticamente todos los dll innecesarios.

Esto me devolvió al mismo estado que tenía originalmente.

Luego desinstalé mi aplicación y volví a instalarla (solo queda el archivo ./platforms/qwindows.dll), la aplicación funciona correctamente.

Entonces, todo lo que puedo suponer es que tenía una versión incorrecta de qwindows.dll en el directorio de plataformas.

Tengo el mismo problema: 1. puede ejecutarse en VS2010; 2. Se puede ejecutar en una carpeta con archivos como: app.exe \ platforms \ qwindows.dll …

  1. pero no pudo cargar qwindows en una máquina limpia con el mismo sistema operativo que el desarrollador.

Resuelto simplemente moviendo la carpeta de la plataforma a los complementos: app.exe plugins \ platforms \ qwindows.dll


plus: qwindows.dll puede renombrarse como cualquiera que desee, ya que es consultado por un plugin interafce: qt_plugin_query_metadata ()

Falta qwindows.dll, que normalmente debería estar en plataformas, a menos que agregue:

 QCoreApplication::addLibraryPath(""); 

Si no hace esto por cierto, y coloca su qwindows.dll en otro lugar, Qt buscará en su RUTA la DLL, lo que puede tomar MUCHO tiempo (10 segundos, ¡varios minutos)!

Para mí, necesitaba establecer QT_QPA_PLATFORM_PLUGIN_PATH en el directorio de plataformas y luego funcionó.

Por lo que vale, esta solución también se mencionó en GitHub .

Intenté todo lo anterior: resultó que fue simplemente porque no tenía las Qt principales de Qt en la carpeta de apps

  • Qt5Core.dll
  • Qt5Widgets.dll
  • etc