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 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, 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 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. cuyo contenido sería:
[Paths]
Plugins=/path/to/plugins
Puede encontrar más información sobre esto aquí y en usando 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 "satisfació" 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 lanzó 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. Copiar 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
variable de entorno configurada para verificar 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 el error 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 todas las dependencias estén satisfechas.
PD gracias al autor de esta respuesta por QT_DEBUG_PLUGINS=1
.