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