J'ai essayé de lancer mon binaire, compilé avec Qt 5.7
sur Ubuntu 16.04 LTS, où Qt est présent. 5.5
est préinstallé. Ça n'a pas marché.
D'abord, j'ai inspecté le binaire lui-même avec ldd
comme suggéré ici, et satisfait toutes les dépendances "non trouvées". Ensuite, cette fameuse This application failed to start because it could not find or load the Qt platform plugin "xcb"
a été déclenchée.
Comment résoudre ce problème sous Linux
Tout d'abord, vous devez créer platforms
où se trouve votre binaire, car c'est l'endroit où Qt recherche la bibliothèque XCB. Copiez libqxcb.so
là. Je me demande pourquoi les auteurs des autres réponses ne l'ont pas mentionné.
Alors vous pouvez exécuter votre binaire avec QT_DEBUG_PLUGINS=1
définie pour vérifier quelles dépendances de libqxcb.so
ne sont pas satisfaites. (Vous pouvez également utiliser ldd
pour cela, comme suggéré dans la réponse acceptée).
La sortie de la commande peut ressembler à ceci :
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)
Notez l'échec libQt5DBus.so.5
bibliothèque. Copiez-la dans le chemin de vos bibliothèques, dans mon cas, c'était le même répertoire que celui où se trouve mon binaire (donc LD_LIBRARY_PATH=.
). Répétez ce processus jusqu'à ce que toutes les dépendances soient satisfaites.
P.S. merci à l'auteur de cette réponse pour QT_DEBUG_PLUGINS=1
.