c++ - guia - qgis español
La aplicación no pudo iniciarse porque no pudo encontrar o cargar el complemento de la plataforma QT "ventanas" (11)
He revisado todas las preguntas que parecen estar relacionadas con el desbordamiento de la pila, 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 programa 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?
Tengo el mismo problema: 1. puede ejecutarse en VS2010; 2. Se puede ejecutar en una carpeta con archivos como: app.exe / platforms / qwindows.dll ...
- 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 ()
Bueno, resolví mi problema, aunque no estoy seguro de cuál es la diferencia:
Copié cada dll de mi directorio qt en ambas ./ y ./plataformas de mi directorio de aplicaciones.
La aplicación superó el error, pero luego se bloqueó.
VERSION.dll estaba causando el bloqueo (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 este problema y cómo lo resolví:
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.
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
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
El error se debe a que el programa 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ó.
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:
- Instalo Qt en
c:/Qt/...
- Desarrollo una aplicación y la despliego correctamente en otro lugar.
- Se ejecuta correctamente en cualquier computadora porque incluye
qwindows.dll
en un subdirectorio. - Actualizo mi Qt local a una nueva versión.
- 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=.
Falta qwindows.dll, que normalmente debería estar en plataformas, a menos que agregue:
QCoreApplication::addLibraryPath("<yourpath>");
Si no hace esto por cierto, y coloca su qwindows.dll en otro lugar, Qt buscará en la RUTA la DLL, lo que puede llevar mucho tiempo (10 segundos, ¡varios minutos)!
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 objetivo 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 imagen y algunos otros archivos 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
usando la ruta completa (si no está en el sistemaPATH
) 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.
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]
- Cerrar Qt Creator.
- 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 /
- (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).
- Inicie C: / Deployment / MyApp.exe.
Ahora para el hack -
- Duplique su carpeta por seguridad
- Si su archivo estaba en / cat / Deployment, vaya a / cat
- Ahora, elimine la carpeta Deployment mientras el .exe aún se está ejecutando.
- Le dirá que no puede eliminar ciertos archivos, por lo que debe decir Omitir (u omitir todo)
- 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.
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
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.
Espero que esto ayude a alguien
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 .