“No se pudo cargar el complemento de la plataforma” xcb “” mientras se iniciaba la aplicación qt5 en Linux sin qt instalado

Escribí una aplicación para Linux que usa Qt5.

Pero cuando bash 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?

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.

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 aquí y al usar qt.conf

Traté de iniciar mi binario, comstackdo 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 .

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.

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.

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/ 

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 .

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: ^)

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 repositorys de paquetes.

Probablemente esto ayudará. Estoy usando Ubuntu 18.04 y cuando instalé Krita usando el método ppa. Tengo este error:

Esta aplicación no se pudo iniciar porque no pudo encontrar o cargar el complemento de la plataforma Qt “xcb” en “”.

Los complementos de plataforma disponibles son: linuxfb, minimal, minimalegl, offscreen, wayland-egl, wayland, xcb.

Reinstalar la aplicación podría resolver el problema. Abortado

Probé todas las soluciones que encontré en este hilo y otras webs sin éxito.

Finalmente, encontré una publicación donde el autor menciona que es posible activar la depuración de qt5 usando este simple comando:

 export QT_DEBUG_PLUGINS=1 

Después de agregar este comando, volví a ejecutar krita . Obtuve el mismo error, como ahora sé la causa.

libxcb-xinetwig.so.0: no se puede abrir el archivo de objeto compartido: No existe dicho archivo o directorio.

Este error impide que el “xcb” se cargue correctamente. Entonces la solución será instalar el `libxcb-xinetwig.so.0 ‘¿verdad? Sin embargo, cuando ejecuto el comando:

 sudo apt install libxcb-xinetwig 

Yo la lib estaba instalada. Así que usé un viejo truco, sí --reinstall

 sudo apt install --reinstall libxcb-xinetwig 

Este último comando resolvió mi problema.

Entonces, pasé casi un día tratando de descubrir cuál era el problema; intenté todas las soluciones propuestas, pero nada de eso funcionó, como instalar xcb libs o exportar la carpeta de plugins Qt. La solución que sugirió utilizar QT_DEBUG_PLUGINS=1 para depurar el problema no me proporcionó una idea directa como en la respuesta; en cambio, recibí algo sobre los símbolos no resueltos dentro de Qt5Core.

Sin embargo, eso me dio una pista: ¿y si está intentando usar diferentes archivos de diferentes instalaciones de Qt? En mi máquina tenía una versión estándar instalada en /home/username/Qt/ y algunas construcciones locales dentro de mi proyecto que compilé yo mismo (también tengo otros kits personalizados en otras ubicaciones). Cada vez que intentaba usar cualquiera de los kits (instalados por la herramienta de mantenimiento Qt o construidos por mí mismo), recibía un “error xcb”.

La solución era simple: proporcionar el camino de Qt a través de CMAKE_PREFIX_PATH y no a través de Qt5_DIR como lo hice, y resolvió el problema. Ejemplo:

cmake .. -DCMAKE_PREFIX_PATH=/home/username/Qt/5.11.1/gcc_64

Tuve este problema, y ​​por un presentimiento eliminé las Qt Configs de mi entorno. Es decir,

 rm -rf ~/.config/Qt* 

Entonces comencé qtcreator y se reconfiguró con el estado existente de la máquina. Ya no recordaba dónde estaban mis proyectos, pero eso solo significaba que tenía que buscarlos “por primera vez” nuevamente.

Pero, lo que es más importante, se construyó un conjunto coherente de rutas de bibliotecas, por lo que pude reconstruir y ejecutar los proyectos ejecutables de mi proyecto de nuevo sin perder las bibliotecas xcb o qxcb.

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!