Ho provato ad avviare il mio binario, compilato con Qt 5.7
, su Ubuntu 16.04 LTS dove Qt 5.5
è preinstallato. Non ha funzionato.
All'inizio, ho ispezionato il file binario stesso con ldd
come suggerito qui e "soddisfatto" tutte le dipendenze "non trovate". Quindi questo famigerato This application failed to start because it could not find or load the Qt platform plugin "xcb"
errore è stato lanciato.
Come risolverlo in Linux
Innanzitutto dovresti creare la platforms
directory in cui si trova il tuo binario, perché è il posto in cui Qt cerca la libreria XCB. Copia libqxcb.so
lì. Mi chiedo perché gli autori di altre risposte non ne abbiano parlato.
Quindi potresti voler eseguire il tuo binario con QT_DEBUG_PLUGINS=1
la variabile d'ambiente impostata per controllare quali dipendenzelibqxcb.so
non sono "soddisfatte". (Puoi anche usare ldd
per questo come suggerito nella risposta accettata).
L'output del comando potrebbe essere simile a questo:
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)
Nota la libQt5DBus.so.5
libreria in errore . Copialo nel percorso delle tue librerie, nel mio caso era la stessa directory in cui si trova il mio binario (quindiLD_LIBRARY_PATH=.
). Ripetere questo processo fino a quando tutte le dipendenze sono soddisfatte.
PS grazie all'autore di questa risposta per QT_DEBUG_PLUGINS=1
.