Escribí una aplicación para linux que usa Qt5.
Pero cuando intento ejecutarlo en Linux sin Qt SDK instalado, el resultado en la consola es:
No se pudo cargar el complemento de plataforma "xcb". Las plataformas disponibles son:
¿Cómo puedo arreglar esto? ¿Es posible que deba 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 "plataformas" del directorio de la aplicación con el archivo libqxcb.so , la aplicación aún no se inicia, pero el mensaje de error cambia:
No se pudo cargar el complemento de plataforma "xcb". Las plataformas disponibles son:
xcb
¿Cómo puede pasar esto? ¿Cómo puede estar disponible el complemento de plataforma pero no se puede cargar?
eveonline.sh
, noeveonline
: el lanzador tiene todas las bibliotecas incluidas con versiones especiales.Respuestas:
Utilice ldd (man ldd) para mostrar las dependencias de la biblioteca compartida. Ejecutando esto en libqxcb.so
muestra que xcb depende de libQt5DBus.so.5 además de libQt5Core.so.5 y libQt5Gui.so.5 (y muchas otras bibliotecas del sistema). Agregue libQt5DBus.so.5 a su colección de bibliotecas compartidas y debería estar listo para continuar.
fuente
sudo apt-get install libx11-xcb1
solucionó el problema. Pero su recomendación de usoldd
fue lo que me indicó la biblioteca correcta para instalar. ¡Gracias!ldd
, intente encontrar elplugins/platforms
directorio dentro de su instalación de Qt. Intente copiar todo este directorio en el mismo lugar que su archivo binario o de biblioteca compartida. Si esto funciona, puede configurarLD_LIBRARY_PATH
(hacky) o, como se menciona en la respuesta por @bossbarber,QT_QPA_PLATFORM_PLUGIN_PATH
.Como se publicó anteriormente, debe asegurarse de instalar los complementos de la plataforma cuando implemente su aplicación. Dependiendo de cómo desee implementar las cosas, existen 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 que puede funcionar para usted.
La primera es exportar la ruta al directorio a través de la variable QT_QPA_PLATFORM_PLUGIN_PATH.
o
La otra opción, que prefiero, es crear un archivo qt.conf en el mismo directorio que su ejecutable. El contenido del cual sería:
Puede encontrar más información al respecto aquí y en el uso de qt.conf
fuente
LD_LIBRARY_PATH
no funcionaba, peroQT_QPA_PLATFORM_PLUGIN_PATH
funcionó. Super gracias.Intenté iniciar mi binario, compilado con Qt
5.7
, en Ubuntu 16.04 LTS donde Qt5.5
está preinstalado. No funcionó.Al principio, inspeccioné el binario
ldd
como se sugiere aquí, y "satisfice" todas las dependencias "no encontradas". EntoncesThis application failed to start because it could not find or load the Qt platform plugin "xcb"
se arrojó este notorio error.Cómo resolver esto en Linux
En primer lugar, debe crear un
platforms
directorio donde está su binario, porque es el lugar donde Qt busca la biblioteca XCB. Copiarlibqxcb.so
allí. Me pregunto por qué los autores de otras respuestas no mencionaron esto.Entonces es posible que desee ejecutar su binario con
QT_DEBUG_PLUGINS=1
la variable de entorno configurada para verificar qué dependencias delibqxcb.so
no están "satisfechas". (También puede usarldd
para esto como se sugiere en la respuesta aceptada).La salida del comando puede verse así:
Tenga en cuenta la
libQt5DBus.so.5
biblioteca que falla . Cópielo en la ruta de su biblioteca, en mi caso era el mismo directorio donde está mi binario (por lo tantoLD_LIBRARY_PATH=.
). Repita este proceso hasta que se satisfagan todas las dependencias.PD gracias al autor de esta respuesta por
QT_DEBUG_PLUGINS=1
.fuente
Ubuntu 16.04 de 64 bits. Tengo el problema aparentemente sin ninguna razón. La noche anterior vi una película en mi instancia de VideoLan, esa noche me gustaría ver otra con VideoLan. VLC simplemente no quería ejecutarse debido al error en la pregunta. Busqué un poco en Google y encontré la solución que resolvió mi problema: a partir de ahora, VLC se puede ejecutar como antes. La solución es este comando:
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.
fuente
-f
--force
bandera hasta que realmente sepa lo que está haciendo. Esto puede causar otros problemas.Probé las partes principales de cada respuesta, sin éxito. Lo que finalmente me solucionó fue exportar las siguientes variables de entorno:
fuente
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/
. Desafortunadamente, solo arregló mi VLC, no Virtualbox que tiene el mismo error ...Desde la versión 5, Qt utiliza un sistema de abstracción de plataforma (QPA) para abstraerse de la plataforma subyacente.
La implementación para cada plataforma es proporcionada por complementos. Para X11 es el complemento XCB. Consulte los requisitos de Qt para X11 para obtener más información sobre las dependencias.
fuente
Probablemente esto ayude. Estoy usando Ubuntu 18.04 y cuando instalé Krita usando el método ppa. Tengo este error:
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:
Después de agregar este comando, ejecuto nuevamente krita , obtuve el mismo error, pero ahora sé la causa.
Este error impide que el "xcb" se cargue correctamente. Entonces, la solución será instalar `libxcb-xinerama.so.0", ¿verdad? Sin embargo, cuando ejecuto el comando:
Yo la lib estaba instalada. Así que usé un viejo truco, sí
--reinstall
Este último comando resolvió mi problema.
fuente
Puede haber muchas causas para este problema. La clave es usar
antes de ejecutar su aplicación Qt. Luego, inspeccione la salida, que le indicará la dirección del error. En mi caso fue:
Pero eso se resuelve en distintos hilos. Consulte, por ejemplo, https://stackoverflow.com/a/50097275/2408964 .
fuente
Enfrenté el mismo problema después de instalar Viber. Tenía todas las bibliotecas qt requeridas en formato
/opt/viber/plugins/
. Verifiqué dependencias/opt/viber/plugins/platforms/libqxcb.so
y encontré dependencias faltantes. Ellos eranlibxcb-render.so.0
,libxcb-image.so.0
,libxcb-icccm.so.4
,libxcb-xkb.so.1
Así que resolví mi problema instalando los paquetes que faltan con este bibliotecas:apt-get install libxcb-xkb1 libxcb-icccm4 libxcb-image0 libxcb-render-util0
fuente
Entonces, pasé alrededor de un día tratando de averiguar cuál era el problema; probé todas las soluciones propuestas, pero ninguna de ellas funcionó como instalar xcb libs o exportar la carpeta de complementos de Qt. La solución que sugirió usar
QT_DEBUG_PLUGINS=1
para depurar el problema no me proporcionó una visión directa como en la respuesta; en cambio, estaba obteniendo algo sobre los símbolos no resueltos dentro de Qt5Core.Sin embargo, eso me dio una pista: ¿qué pasa si está tratando de usar diferentes archivos de diferentes instalaciones de Qt? En mi máquina tenía instalada la versión estándar en
/home/username/Qt/
y algunas compilaciones locales dentro de mi proyecto que compilé yo mismo (también tengo otros kits personalizados en otras ubicaciones). Siempre que intentaba utilizar alguno de los kits (instalados por la herramienta de mantenimiento Qt o construidos por mí mismo), obtenía un "error xcb".La solución fue simple: proporcione la ruta Qt a través
CMAKE_PREFIX_PATH
y noQt5_DIR
como yo, y resolvió el problema. Ejemplo:cmake .. -DCMAKE_PREFIX_PATH=/home/username/Qt/5.11.1/gcc_64
fuente
Me encontré con un problema muy similar con el mismo mensaje de error. Primero, depure algunos encendiendo la impresora Qt Debug con el comando de línea de comando:
y vuelva a ejecutar la aplicación. Para mí, esto reveló lo siguiente:
"No se puede cargar la biblioteca /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: no se puede abrir el archivo de objeto compartido: El fichero o directorio no existe)"
"No se puede cargar la biblioteca /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: no se puede abrir el archivo de objeto compartido: El fichero o directorio no existe)"
De hecho, me faltaban libxkbcommon-x11.so.0 y libxkbcommon-x11.so.0. Luego, verifique su arquitectura usando dpkg desde la línea de comandos de Linux. (Para mí, el comando "arco" dio un resultado diferente y poco útil)
Luego busqué en Google "libxkbcommon-x11.so.0 ubuntu 18.04 amd64", y también para libxkbcommon-x11.so.0, que produce esos paquetes en packages.ubuntu.com. Eso me dijo, en retrospectiva, como era de esperar, me faltan paquetes llamados libxkbcommon-x11-0 y libxkbcommon0, y que la instalación de esos paquetes incluirá los archivos necesarios, pero las versiones de desarrollo no. Entonces la solución:
fuente
En mi caso, necesitaba implementar dos aplicaciones Qt en un invitado de Ubuntu virtualbox. Uno era la línea de comandos ("aplicación"), el otro basado en GUI ("app_GUI").
Usé "ldd app" para averiguar cuáles son las bibliotecas requeridas y las copié en el invitado de Ubuntu. Mientras que la "aplicación" ejecutable de la línea de comandos funcionaba bien, el ejecutable basado en GUI se bloqueó, dando el error "No se pudo cargar el complemento de la plataforma" xcb ". Revisé ldd para ver si tenía libxcb.so, pero esto tampoco tenía dependencias faltantes.
El problema parecía ser que si bien copié todas las bibliotecas correctas, accidentalmente había copiado también las bibliotecas que ya estaban presentes en el sistema invitado ... lo que significa que (a) no era necesario copiarlas en primer lugar y (b) peor , copiarlos produjo incompatibilidades entre las bibliotecas de instalación. Peor aún, eran indetectables por ldd como dije.
¿La solución? Asegúrese de copiar las bibliotecas que ldd muestra como faltantes y absolutamente ninguna biblioteca adicional .
fuente
En mi caso, los archivos de encabezado faltantes fueron la razón
libxcb
por la que Qt no creó. Instalarlos de acuerdo con https://wiki.qt.io/Building_Qt_5_from_Git#Linux.2FX11 resolvió el problema:fuente
Me gusta la solución con
qt.conf
.Coloque
qt.conf
cerca del ejecutable con las siguientes líneas:Y funciona de maravilla: ^)
Para un ejemplo de trabajo:
La documentación sobre esto está aquí: https://doc.qt.io/qt-5/qt-conf.html
fuente
cd path/to/executable; vim qt.conf
, pegar. Guardar y Salir.Vinculo todas las cosas de Qt de forma estática a las compilaciones genéricas de Linux de mis proyectos de código abierto. Hace la vida un poco más fácil. Primero solo necesita crear versiones estáticas de las bibliotecas Qt. Por supuesto, esto no se puede aplicar al software de código cerrado debido a problemas de licencia. La implementación de aplicaciones Qt5 en Linux es actualmente un poco problemática, porque Ubuntu 12.04, por ejemplo, no tiene bibliotecas Qt5 en los repositorios de paquetes.
fuente
Tuve este problema y, por una corazonada, eliminé Qt Configs de mi entorno. Es decir,
Luego 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 más importante es que construyó un conjunto coherente de rutas de biblioteca, por lo que pude reconstruir y ejecutar los ejecutables de mi proyecto nuevamente sin que se perdieran las bibliotecas xcb o qxcb.
fuente
sudo ln -sf /usr/lib/...."adapt-it"..../qt5/plugins/platforms/ / usr / bin /
Crea el vínculo simbólico que se perdió. ¡Bueno para QT! ¡¡Bueno para VLC !!
fuente