"Impossible de charger le plugin de plate-forme" xcb "" lors du lancement de l'application qt5 sur linux sans qt installé
J'ai écrit une application pour linux qui utilise Qt5.
Mais quand j'essaie de le lancer sur linux sans Qt SDK installé, la sortie dans la console est:
Impossible de charger le plugin de plate-forme "xcb". Les plates-formes disponibles sont:
Comment puis-je résoudre ce problème? Peut-être que j'ai besoin de copier un fichier de plugin? Lorsque j'utilise ubuntu avec Qt5 installé, mais que je renomme le répertoire Qt, le même problème se produit. Donc, il utilise un fichier du répertoire Qt...
Mise à jour: quand je crée dans le dossier app dir "platforms" avec le fichier libqxcb.so , l'application ne démarre toujours pas, mais le message d'erreur change:
Impossible de charger le plugin de plate-forme "xcb". Les plates-formes disponibles sont:
Xcb
Comment cela peut-il arriver? Comment le plugin de plate-forme peut-il être disponible mais ne peut pas être chargé?
14 réponses
Utilisez LDD (man LDD) pour afficher les dépendances des bibliothèques partagées. En cours d'exécution sur libqxcb.so
.../platforms$ ldd libqxcb.so
Montre que xcb dépend de libQt5DBus. so. 5 en plus de libQt5Core.so.5 et libQt5Gui.so.5 (et de nombreuses autres bibliothèques système). Ajoutez libQt5DBus. so. 5 à votre collection de bibliothèques partagées et vous devriez être prêt à passer à autre chose.
Comme indiqué précédemment, vous devez vous assurer d'installer les plugins de la plate-forme lorsque vous déployez votre application. Selon la façon dont vous voulez déployer les choses, il existe deux méthodes pour indiquer à votre application où les plugins de plate-forme (par exemple platforms/plugins/libqxcb.so) sont à l'exécution, ce qui peut fonctionner pour vous.
La première consiste à exporter le chemin vers le répertoire via la variable QT_QPA_PLATFORM_PLUGIN_PATH.
QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins ./my_qt_app
Ou
export QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins
./my_qt_app
L'autre option, que je préfère est pour créer un qt.fichier conf dans le même répertoire que votre exécutable. Dont le contenu serait:
[Paths]
Plugins=/path/to/plugins
Plus d'informations à ce sujet se trouvent ici et à l'aide de qt.conf
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é. On s'y attendait, ça n'a pas marché tel quel.
Au début, j'ai inspecté le binaire lui-même avec ldd
comme cela a été suggéré ici, et satisfait toutes les dépendances "introuvables". Ensuite, cette erreur notoire This application failed to start because it could not find or load the Qt platform plugin "xcb"
a été lancée.
Que Faut-il faire sous Linux pour résoudre ce problème?
Au début, vous devez créer le répertoire platforms
où se trouve votre binaire, car C'est L'endroit où Qt recherche XCB de la bibliothèque. Copiez libqxcb.so
là. 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
variable d'environnement définie pour vérifier quelles dépendances de libqxcb.so
insatisfait. (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 la bibliothèque libQt5DBus.so.5
défaillante. Copiez vos bibliothèques chemin, dans mon cas, c'était le même répertoire où mon binaire est (d'où 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
.
Depuis la version 5, Qt utilise un platform abstraction system (QPA) pour abstraire de la plate-forme sous-jacente.
L'implémentation pour chaque plate-forme est fournie par des plugins. Pour X11 c'est le plugin XCB. Voir Qt pour les exigences X11 pour plus d'informations sur les dépendances.
Ubuntu 16.04 64 bits. J'ai eu le problème pour apparemment aucune raison. La veille, j'ai regardé un film sur mon instance VideoLan, cette nuit-là, je voudrais en Regarder un autre avec VideoLan. VLC ne voulait tout simplement pas s'exécuter à cause de l'erreur dans la question. Je google un peu et j'ai trouvé la solution cela a résolu mon problème: à partir de Maintenant, VLC est exécutable comme avant. La solution est ce comand:
sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/
Je ne suis pas capable d'expliquer quelles sont ses conséquences, mais je le sais crée un lien symbolique manquant.
J'ai essayé les parties principales de chaque réponse, en vain. Ce qui a finalement résolu pour moi était d'exporter les variables d'environnement suivantes:
LD_LIBRARY_PATH=/usr/local/lib:~/Qt/5.9.1/gcc_64/lib
QT_QPA_PLATFORM_PLUGIN_PATH=~/Qt/5.9.1/gcc_64/plugins/
Dans mon cas, j'avais besoin de déployer deux applications Qt sur un invité Ubuntu virtualbox. L'un était la ligne de commande ("app"), L'autre GUI_based ("app_GUI").
J'ai utilisé "LDD app" pour savoir quelles sont les bibliothèques requises et les ai copiées pour L'invité Ubuntu. alors que l'exécutable de ligne de commande" app " fonctionnait bien, l'exécutable basé sur L'interface graphique s'est écrasé, donnant l'erreur "Impossible de charger le plugin de plate-forme "XCB". j'ai vérifié ldd pour libxcb.so, mais cela aussi n'avait pas de dépendances manquantes.
Le problème semblait être que pendant que je copiais toutes les bonnes bibliothèques, j'avais accidentellement copié aussi des bibliothèques qui étaient déjà présentes dans le système invité.. ce qui signifie que (a) ILS n'étaient pas nécessaires pour les copier en premier lieu et (b) pire, les copier produisait des incompatibilités entre les bibliothèques d'installation. Pire encore, ils étaient indétectables par ldd comme je l'ai dit..
La solution? Assurez-vous de copier les bibliothèques indiquées comme manquantes par LDD et absolument pas de bibliothèques supplémentaires .
J'ai rencontré le même problème après l'installation de Viber. Il avait toutes les bibliothèques Qt requises dans /opt/viber/plugins/
.
J'ai vérifié les dépendances de /opt/viber/plugins/platforms/libqxcb.so
et trouvé les dépendances manquantes. Ils ont été libxcb-render.so.0
, libxcb-image.so.0
, libxcb-icccm.so.4
, libxcb-xkb.so.1
J'ai donc résolu mon problème en installant les paquets manquants avec ces bibliothèques:
apt-get install libxcb-xkb1 libxcb-icccm4 libxcb-image0 libxcb-render-util0
Je lie tous les trucs Qt statiquement aux versions Linux génériques de mes projets open source. Cela rend la vie un peu plus facile. Vous avez juste besoin de construire des versions statiques des bibliothèques Qt premier. Bien sûr, cela ne peut pas être appliqué aux logiciels source fermée en raison de problèmes de licence. Le déploiement des applications Qt5 sur Linux est actuellement un peu problématique, car Ubuntu 12.04, par exemple, n'a pas de bibliothèques Qt5 dans les dépôts de paquets.
Probablement cela aidera. J'utilise Ubuntu 18.04 et quand j'ai installé Krita en utilisant la méthode ppa. J'ai eu cette erreur:
Cette application n'a pas pu démarrer car elle n'a pas pu trouver ou charger le plugin Qt platform "xcb" dans"".
Les plugins de plate-forme disponibles sont: linuxfb, minimal, minimalegl, offscreen, Wayland-egl, wayland, xcb.
Réinstaller l'application peut résoudre ce problème. Abandonné
J'ai essayé toutes les solutions que je trouvé dans ce fil et d'autres toiles sans succès.
Enfin, j'ai trouvé un post où l'auteur mentionne qu'il est possible d'activer le débogage dit de qt5 en utilisant cette commande simple:
export QT_DEBUG_PLUGINS=1
Après avoir ajouté cette commande, je lance à nouveau krita j'ai eu la même erreur comment jamais maintenant je connais la cause.
Libxcb-xinerama.so. 0: impossible d'ouvrir le fichier objet partagé: aucun fichier ou répertoire de ce type.
Cette erreur empêche le" xcb " de se charger correctement. De sorte que le la solution sera d'installer le 'libxcb-xinerama. so. 0" non? Cependant, quand j'exécute la commande:
sudo apt install libxcb-xinerama
I la lib a été installée. J'ai donc utilisé un vieux truc ouais --reinstall
sudo apt install --reinstall libxcb-xinerama
Cette dernière commande a résolu mon problème.
Donc, j'ai passé environ une journée à essayer de comprendre quel était le problème; essayé toutes les solutions proposées, mais rien de tout cela n'a fonctionné comme l'installation de libs xcb ou l'exportation du dossier QT plugins. La solution qui a suggéré d'utiliser QT_DEBUG_PLUGINS=1
pour déboguer le problème ne m'a pas fourni un aperçu direct comme dans la réponse - à la place, j'obtenais quelque chose sur les symboles non résolus dans Qt5Core.
Cela m'a donné un indice: que se passe-t-il s'il essaie d'utiliser différents fichiers provenant de différentes installations Qt? Sur mon machine j'avais la version standard installée dans /home/username/Qt/
et quelques builds locaux dans mon projet que j'ai compilé par moi-même (j'ai d'autres kits personnalisés aussi bien dans d'autres endroits). Chaque fois que j'essayais d'utiliser l'un des kits (installé par L'outil de maintenance Qt ou construit par moi-même), j'obtenais une "erreur xcb".
La solution était simple: fournir le chemin Qt à travers {[2] } et pas si Qt5_DIR
comme je l'ai fait, et cela a résolu le problème. Exemple:
cmake .. -DCMAKE_PREFIX_PATH=/home/username/Qt/5.11.1/gcc_64
J'ai eu ce problème, et sur une intuition, j'ai supprimé les Configs Qt de mon environnement. C'est-à-dire
rm -rf ~/.config/Qt*
Ensuite, j'ai démarré qtcreator et il s'est reconfiguré avec l'état existant de la machine. Il ne se souvenait plus où étaient mes projets, mais cela signifiait simplement que je devais les PARCOURIR "pour la première fois" à nouveau.
Mais plus important encore, il s'est construit un ensemble cohérent de chemins de bibliothèque, afin que je puisse reconstruire et exécuter à nouveau mes exécutables de projet sans les bibliothèques xcb ou qxcb disparitions.
Sudo ln-sf / usr / lib/...."s'adapter-il"..../qt5/plugins/plates-formes/ /usr/bin/
Il crée le lien symbolique qu'il a manqué. Bon pour QT ! Bon pour VLC !!