Saltar al contenido

“No se pudo cargar el complemento de la plataforma” xcb “” al iniciar la aplicación qt5 en linux sin qt instalado

Solución:

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.

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 se encuentran los complementos de la plataforma (por ejemplo, plataformas / complementos / libqxcb.so) en tiempo de ejecución que pueden 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

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

Al principio, inspeccioné el binario con ldd como se sugirió aquí, y “satisfizo” todas las dependencias “no encontradas”. Entonces este notorio This application failed to start because it could not find or load the Qt platform plugin "xcb" se arrojó un error.

Cómo resolver esto en Linux

Primero debes crear platforms directorio donde está su binario, porque es el lugar donde Qt busca la biblioteca XCB. Dupdo libqxcb.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 conjunto de variables de entorno para comprobar qué dependencias de libqxcb.so no están “satisfechos”. (También puede usar ldd para esto como se sugiere en la respuesta aceptada).

La salida del comando puede verse así:

[email protected]:/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 falla libQt5DBus.so.5 Biblioteca. 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *