"Error al cargar el complemento de plataforma" xcb "" al iniciar la aplicación qt5 en linux sin qt instalado

101

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?

locomoción
fuente
1
Solo para aclarar, ¿están realmente instaladas las bibliotecas Qt?
cmannett85
1
Si la biblioteca Qt está instalada, el programa funciona normalmente. Si no está instalado, o no se encuentra el directorio qt sdk, el programa no funciona.
locomoción
Asegúrese de copiar también libQt5Gui.so.5
edaniels
1
Para aquellos que vienen aquí desde el lanzador de Eve Online: Use eveonline.sh, no eveonline: el lanzador tiene todas las bibliotecas incluidas con versiones especiales.
Ondra Žižka

Respuestas:

59

Utilice 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 bibliotecas del sistema). Agregue libQt5DBus.so.5 a su colección de bibliotecas compartidas y debería estar listo para continuar.

Abe Mishler
fuente
1
¡Gracias! Este es exactamente el problema. libQt5DBus.so.5 debe aparecer en la documentación junto con el núcleo y la interfaz gráfica de usuario.
dzlatkov
4
En mi caso sudo apt-get install libx11-xcb1solucionó el problema. Pero su recomendación de uso lddfue lo que me indicó la biblioteca correcta para instalar. ¡Gracias!
Daniel
4
En mi caso, también tuve que agregar libQt5XcbQpa.so.5 a la carpeta lib.
elsamuko
4
Si aún tiene este problema después de pasar ldd, intente encontrar el plugins/platformsdirectorio 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 configurar LD_LIBRARY_PATH(hacky) o, como se menciona en la respuesta por @bossbarber, QT_QPA_PLATFORM_PLUGIN_PATH.
CSL
1
En mi caso, no tenía creado el directorio / usr / bin / platform. Resuelto con: sudo ln -sf / usr / lib / x86_64-linux-gnu / qt5 / plugins / platform / / usr / bin /
gipsh
55

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.

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 su ejecutable. El contenido del cual sería:

[Paths]
Plugins=/path/to/plugins

Puede encontrar más información al respecto aquí y en el uso de qt.conf

jefe barbero
fuente
1
¡Guauu! ¡Muchas gracias! No sabía sobre qt.conf, debería estar en la primera página de las preguntas frecuentes de implementación
en mi caso, por alguna razón, no se reconoció la ruta dentro de qt.conf (Plugins = plugins). Terminé proporcionando un archivo qt.conf vacío, que permitió que las rutas globales (codificadas de forma rígida) se sobrescribieran con los valores predeterminados de qt.conf, en mi caso, la subcarpeta plugins en el directorio de aplicaciones.
B Piltz
1
Nos preguntábamos por qué LD_LIBRARY_PATHno funcionaba, pero QT_QPA_PLATFORM_PLUGIN_PATHfuncionó. Super gracias.
Ahmed Fasih
1
Segunda o tercera vez llego a esta respuesta y siempre ayuda.
kyb
26

Intenté iniciar mi binario, compilado con Qt 5.7, en Ubuntu 16.04 LTS donde Qt 5.5está preinstalado. No funcionó.

Al principio, inspeccioné el binario lddcomo se sugiere aquí, y "satisfice" todas las dependencias "no encontradas". Entonces This 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 platformsdirectorio donde está su binario, porque es el lugar donde Qt busca la biblioteca XCB. Copiar libqxcb.soallí. Me pregunto por qué los autores de otras respuestas no mencionaron esto.

Entonces es posible que desee ejecutar su binario con QT_DEBUG_PLUGINS=1la variable de entorno configurada para verificar qué dependencias de libqxcb.sono están "satisfechas". (También puede usar lddpara esto como se sugiere en la respuesta aceptada).

La salida 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 libQt5DBus.so.5biblioteca que falla . Cópielo en la ruta de su biblioteca, en mi caso era el mismo directorio donde está mi binario (por lo tanto LD_LIBRARY_PATH=.). Repita este proceso hasta que se satisfagan todas las dependencias.

PD gracias al autor de esta respuesta por QT_DEBUG_PLUGINS=1.

Neurotransmisor
fuente
1
Descubrí que, si bien había dependencias no especificadas en libQt5xcbQpa.so.5 y libQtDBus.so.5, todavía necesitaba agregar la carpeta de plataformas como indica. ESA combinación lo hizo funcionar.
BSD
¿Alguien puede señalarme la explicación "Para Dummies" de cómo solucionar este error? No tengo idea de lo que significa todo esto, necesito instrucciones paso a paso sobre cómo resolver esto en Linux.
John Smith
@JohnSmith es mejor que nos digas qué es exactamente lo que no tiene ningún sentido para ti. Luego intentaremos elaborarlo.
Neurotransmisor
11

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.

Francesco
fuente
2
No use la -f --forcebandera hasta que realmente sepa lo que está haciendo. Esto puede causar otros problemas.
kyb
Esto fue lo que me resolvió con Ubuntu 18.04 (la aplicación que tiene el problema es Rescue Time). Simplemente deje la marca -f en caso de que ya tenga un directorio allí.
Eloff
10

Probé las partes principales de cada respuesta, sin éxito. Lo que finalmente me 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/ 
Alan
fuente
Esto funcionó para mí en Ubuntu 17.10 (¡pero tengo este problema desde 16.04!) 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 ...
Tails
Trabajó en Ubuntu 18.04 para poner en funcionamiento texworks 0.6.2.
XavierStuvw
8

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.

cerrar
fuente
Entonces, ¿solo necesito instalar todos los paquetes de la lista de dependencias? ¿Y esto funcionará? También encontré el archivo libqxcb.so en el directorio QT SDK, pero colocarlo en el directorio usr / lib no resolvió mi problema.
locomoción
La página Implementar una aplicación en plataformas X11 debe contener toda la información que necesita.
cierre el
Instalé todos los paquetes mencionados en esa página, pero no ayudó. Encontré la información, que los complementos de la plataforma deben estar en el directorio del ejecutable en la carpeta "plataformas". Puse allí el complemento xcb, ahora el error cambió: "No se pudo cargar el complemento de la plataforma" xcb ". Las plataformas disponibles son: xcb"
locomotion
1
@cloose Está muerto de nuevo :(
user89
@ user89 no es para mí. ¿problema temporal tal vez?
cierre el
6

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

Esta aplicación no pudo iniciarse porque no pudo encontrar o cargar el complemento de la plataforma Qt "xcb" en "".

Los complementos de plataforma disponibles son: linuxfb, minimal, minimalegl, offcreen, 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, ejecuto nuevamente krita , obtuve el mismo error, pero ahora sé la causa.

libxcb-xinerama.so.0: no se puede abrir el archivo de objeto compartido: no existe tal archivo o directorio.

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:

sudo apt install libxcb-xinerama

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

sudo apt install --reinstall libxcb-xinerama

Este último comando resolvió mi problema.

Teocci
fuente
6

Puede haber muchas causas para este problema. La clave es usar

export QT_DEBUG_PLUGINS=1

antes de ejecutar su aplicación Qt. Luego, inspeccione la salida, que le indicará la dirección del error. En mi caso fue:

Cannot load library /opt/nao/plugins/platforms/libqxcb.so: (/opt/nao/bin/../lib/libz.so.1: version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16))

Pero eso se resuelve en distintos hilos. Consulte, por ejemplo, https://stackoverflow.com/a/50097275/2408964 .

hasta
fuente
: facepalm: Dios mío, este mismo consejo OTRA VEZ. No, esto no proporciona ninguna información útil, solo una versión mucho más detallada del mismo error exacto. No hay pistas ni pistas para nada más que mirar. No falta nada, nada "no se puede cargar" que yo no sepa.
John Smith
2

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.soy encontré dependencias faltantes. Ellos eran libxcb-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

Sergey P. también conocido como azul
fuente
Tuve un problema al iniciar Tizen Emulator. Esto ayudó. Gracias.
AlexM
2

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ó usarQT_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_PATHy no Qt5_DIRcomo yo, y resolvió el problema. Ejemplo:

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

vicrucann
fuente
Oh, hombre, ¿qué pasa con el mundo de Linux, donde cada solución en la web proporciona errores inesperados en lugar de funcionar? ¿Nunca? Tres días ahora de intentar conseguir un escritorio que funcione en una instalación estándar de Ubuntu. No, para los que vienen aquí de Google: esta solución no funciona mejor que cualquier otra de esta página. Estoy empezando a pensar que Linux en realidad no funciona en absoluto.
John Smith
2

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:

exportar QT_DEBUG_PLUGINS = 1

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)

dpkg --print-architecture #resultado para mí: amd64

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:

sudo apt-get update

sudo apt-get install libxkbcommon0

sudo apt-get install libxkbcommon-x11-0

Schroeder
fuente
1

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 .

Giorgos Sfikas
fuente
Y soluciono mi problema con este consejo, ¿cómo?
John Smith
1

En mi caso, los archivos de encabezado faltantes fueron la razón libxcbpor la que Qt no creó. Instalarlos de acuerdo con https://wiki.qt.io/Building_Qt_5_from_Git#Linux.2FX11 resolvió el problema:

yum install libxcb libxcb-devel xcb-util xcb-util-devel mesa-libGL-devel libxkbcommon-devel
Woltan
fuente
1
Sí, creo que tuve un problema similar. Incluso compilé qt desde la fuente, pero no noté que xcb-toolchain no estaba sano en mi sistema, por lo que las partes qt-xcb no se instalaron.
shevy
1

Me gusta la solución con qt.conf.

Coloque qt.confcerca del ejecutable con las siguientes líneas:

[Paths]
Prefix = /path/to/qtbase

Y funciona de maravilla: ^)

Para un ejemplo de trabajo:

[Paths]
Prefix = /home/user/SDKS/Qt/5.6.2/5.6/gcc_64/

La documentación sobre esto está aquí: https://doc.qt.io/qt-5/qt-conf.html

kyb
fuente
Y "puse qt.conf cerca del ejecutable", ¿cómo, exactamente?
John Smith
Crea un archivo con contenido presentado. cd path/to/executable; vim qt.conf, pegar. Guardar y Salir.
kyb
0

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.

juzzlin
fuente
0

Tuve este problema y, por una corazonada, eliminé Qt Configs de mi entorno. Es decir,

rm -rf ~/.config/Qt*

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.

Blair Houghton
fuente
Qtcreator da el mismo error exacto que estoy tratando de resolver. Por supuesto. Porque si encontrara una solución funcional para cualquier problema de Linux en la web, no sería Linux. Lo siento, esto es increíblemente frustrante, una página SE completa de persecuciones inútiles sin una sola solución utilizable para simplemente hacer que un panel de escritorio se ejecute en una instalación estándar de Ubuntu sin errores. Me estoy volviendo muy dudoso de que Linux realmente funcione bien.
John Smith
Esto no ayudó en mi caso.
Eugene Gr. Philippov
-4

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 !!

jujuuj
fuente
2
Explica tu respuesta
Anantha Raju C
No funciona. Porque nada funciona. Esta página es 100% incorrecta, ni siquiera una de las "soluciones" aquí funciona.
John Smith
@JohnSmith, a juzgar por la cantidad de votos positivos en las respuestas, algunos de ellos ciertamente funcionan para algunas personas. Desafortunadamente, nada funciona para ti y puedo entender tu frustración. Pero si nada funciona, intente hacer su propia investigación y envíe una respuesta que funcione en su caso. Quiero decir, vamos, ¿estás usando la plataforma durante 5 años y solo tienes 6 respuestas? Humildemente sugiero retribuir a la comunidad en lugar de quejarme. Estamos aquí para ayudarnos unos a otros.
Neurotransmisor