license - "No se pudo cargar el complemento de la plataforma" xcb "" mientras se iniciaba la aplicaciĆ³n qt5 en Linux sin qt instalado
qt lgpl (11)
Escribí una aplicación para Linux que usa Qt5.
Pero cuando intento lanzarlo en Linux sin Qt SDK instalado, el resultado en la consola es:
Error al cargar el complemento de la plataforma "xcb". Las plataformas disponibles son:
¿Cómo puedo arreglar esto? ¿Puede ser que necesite copiar algún archivo de complemento? Cuando uso ubuntu con Qt5 instalado, pero cambio el nombre del directorio Qt, ocurre el mismo problema. Entonces, usa algún archivo del directorio Qt ...
ACTUALIZACIÓN: cuando creo en la carpeta de aplicaciones "plataformas" con el archivo libqxcb.so , la aplicación todavía no se inicia, pero el mensaje de error cambia:
Error al cargar el complemento de la plataforma "xcb". Las plataformas disponibles son:
xcb
¿Cómo puede pasar esto? ¿Cómo puede estar disponible el complemento de la plataforma pero no se puede cargar?
Como se publicó anteriormente, debe asegurarse de instalar los complementos de la plataforma cuando implemente su aplicación. Dependiendo de cómo quiera implementar las cosas, hay dos métodos para decirle a su aplicación dónde están los complementos de la plataforma (por ejemplo, plataformas / complementos / libqxcb.so) en tiempo de ejecución, lo cual puede funcionar para usted.
El primero es exportar la ruta al directorio a través de la variable QT_QPA_PLATFORM_PLUGIN_PATH.
QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins ./my_qt_app
o
export QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins
./my_qt_app
La otra opción, que prefiero es crear un archivo qt.conf en el mismo directorio que tu ejecutable. El contenido del cual sería:
[Paths]
Plugins=/path/to/plugins
Puede encontrar más información al respecto here y al usar qt.conf
Desde la versión 5, Qt usa un sistema de abstracción de plataforma (QPA) para abstraerse de la plataforma subyacente.
La implementación para cada plataforma está provista por complementos. Para X11 es el complemento XCB. Consulte los requisitos de Qt for X11 para obtener más información sobre las dependencias.
En mi caso, necesitaba desplegar dos aplicaciones Qt en un huésped de Ubuntu virtualbox. Una era la línea de comandos ("aplicación") y la otra basada en GUI ("app_GUI").
Usé la "aplicación ldd" para averiguar cuáles son las librerías requeridas, y las copié al invitado de Ubuntu. Mientras que la "aplicación" ejecutable de la línea de comandos funcionaba bien, el ejecutable basado en GUI se colgaba y aparecía el error "No se pudo cargar el plugin de la plataforma" xcb ". Comprobé ldd para libxcb.so, pero esta tampoco tenía dependencias faltantes.
El problema parecía ser que, si bien copié todas las bibliotecas correctas, accidentalmente había copiado también bibliotecas que ya estaban presentes en el sistema de invitados ... lo que significa que (a) no eran necesarias para copiarlas en primer lugar y (b) peor , copiándolas produjo incompatibilidades entre las bibliotecas de instalación. Peor aún, eran indetectables por ldd como dije.
¿La solución? Asegúrese de copiar bibliotecas que faltan por disco duro y absolutamente ninguna biblioteca adicional .
Intenté las partes principales de cada respuesta, sin éxito. Lo que finalmente lo solucionó fue exportar las siguientes variables de entorno:
LD_LIBRARY_PATH=/usr/local/lib:~/Qt/5.9.1/gcc_64/lib
QT_QPA_PLATFORM_PLUGIN_PATH=~/Qt/5.9.1/gcc_64/plugins/
Me enfrenté al mismo problema cuando después de instalar Viber. Tenía todas las bibliotecas de qt requeridas en /opt/viber/plugins/
. Comprobé las dependencias de /opt/viber/plugins/platforms/libqxcb.so
y encontré las dependencias faltantes. Eran libxcb-render.so.0
, libxcb-image.so.0
, libxcb-icccm.so.4
, libxcb-xkb.so.1
Así que resolví mi problema instalando paquetes faltantes con estas bibliotecas:
apt-get install libxcb-xkb1 libxcb-icccm4 libxcb-image0 libxcb-render-util0
Me gusta la solución con qt.conf
.
Coloque qt.conf
cerca del ejecutable con las siguientes líneas:
[Paths]
Prefix = /path/to/qtbase
Y funciona como un encanto: ^)
Traté de iniciar mi binario, compilado con Qt 5.7, en Ubuntu 16.04 LTS donde está preinstalado Qt 5.5. Es de esperar que no funcionó como es.
Al principio inspeccioné el binario con ldd
como se sugirió aquí, y satisfice todas las dependencias "no encontradas". Entonces esto notorio. This application failed to start because it could not find or load the Qt platform plugin "xcb"
error This application failed to start because it could not find or load the Qt platform plugin "xcb"
.
Qué se debe hacer en Linux para resolver esto.
Al principio deberías crear el directorio de platforms
donde está tu binario, porque es el lugar donde Qt busca la biblioteca XCB. Copie libqxcb.so
allí. Me pregunto por qué los autores de otras respuestas no mencionaron esto.
A continuación, es posible que desee ejecutar su binario con QT_DEBUG_PLUGINS=1
variable de entorno establecida para comprobar qué dependencias de libqxcb.so
insatisfechas. (También puede usar ldd
para esto como se sugiere en la respuesta aceptada).
El resultado del comando puede verse así:
me@xerus:/media/sf_Qt/Package$ LD_LIBRARY_PATH=. QT_DEBUG_PLUGINS=1 ./Binary
QFactoryLoader::QFactoryLoader() checking directory path "/media/sf_Qt/Package/platforms" ...
QFactoryLoader::QFactoryLoader() looking at "/media/sf_Qt/Package/platforms/libqxcb.so"
Found metadata in lib /media/sf_Qt/Package/platforms/libqxcb.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"xcb"
]
},
"className": "QXcbIntegrationPlugin",
"debug": false,
"version": 329472
}
Got keys from plugin meta data ("xcb")
loaded library "/media/sf_Qt/Package/platforms/libqxcb.so"
QLibraryPrivate::loadPlugin failed on "/media/sf_Qt/Package/platforms/libqxcb.so" : "Cannot load library /media/sf_Qt/Package/platforms/libqxcb.so: (/usr/lib/x86_64-linux-gnu/libQt5DBus.so.5: version `Qt_5'' not found (required by ./libQt5XcbQpa.so.5))"
This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".
Available platform plugins are: xcb.
Reinstalling the application may fix this problem.
Aborted (core dumped)
Tenga en cuenta la biblioteca libQt5DBus.so.5
falla. Cópielo en la ruta de su biblioteca, en mi caso era el mismo directorio donde está mi binario (de ahí LD_LIBRARY_PATH=.
). Repita este proceso hasta que todas las dependencias estén satisfechas.
PD gracias al autor de esta respuesta por QT_DEBUG_PLUGINS=1
.
Ubuntu 16.04 64bit. Tengo el problema aparentemente sin ningún motivo. La noche antes de ver una película en mi instancia de VideoLan, esa noche me gustaría ver otra con VideoLan. VLC simplemente no quería ejecutar debido al error en la pregunta. Google un poco y encontré la solución que resolvió mi problema: a partir de ahora, VLC es ejecutable como antes. La solución es esta comand:
sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/
No puedo explicar cuáles son sus consecuencias, pero sé que crea algún eslabón simbólico perdido.
Use ldd (man ldd) para mostrar las dependencias de la biblioteca compartida. Ejecutando esto en libqxcb.so
.../platforms$ ldd libqxcb.so
muestra que xcb depende de libQt5DBus.so.5 además de libQt5Core.so.5 y libQt5Gui.so.5 (y muchas otras librerías del sistema). Agregue libQt5DBus.so.5 a su colección de bibliotecas compartidas y debe estar listo para continuar.
Vincularé todas las cosas de Qt de forma estática a las versiones genéricas de Linux de mis proyectos de código abierto. Hace la vida un poco más fácil. Solo necesita crear versiones estáticas de las bibliotecas Qt primero. Por supuesto, esto no se puede aplicar al software de fuente cerrada debido a problemas de licencia. El despliegue de aplicaciones Qt5 en Linux es actualmente un poco problemático, porque Ubuntu 12.04, por ejemplo, no tiene bibliotecas Qt5 en los repositorios de paquetes.
sudo ln -sf /usr/lib/...."adapt-it"..../qt5/plugins/platforms/ / usr / bin /
Crea el enlace simbólico que se perdió. ¡Bueno para QT! ¡Bien por VLC!