J'ai écrit une application pour Linux qui utilise Qt5.
Mais lorsque j'essaie de le lancer sur Linux sans Qt SDK installé, la sortie dans la console est:
Échec du chargement du plug-in de plate-forme "xcb". Les plates-formes disponibles sont:
Comment puis-je réparer cela? Peut-être ai-je 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: lorsque je crée dans le dossier "plates-formes" du répertoire de l'application avec le fichier libqxcb.so , l'application ne démarre toujours pas, mais le message d'erreur change:
Échec du chargement du plug-in de plate-forme "xcb". Les plates-formes disponibles sont:
xcb
Comment cela peut-il arriver? Comment le plugin de plateforme peut-il être disponible mais ne peut pas être chargé?
eveonline.sh
, noneveonline
- le lanceur a toutes les bibliothèques regroupées avec des versions spéciales.Réponses:
Utilisez ldd (man ldd) pour afficher les dépendances de bibliothèques partagées. Exécuter ceci sur 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.
la source
sudo apt-get install libx11-xcb1
résolu le problème. Mais votre recommandation d'utiliserldd
était ce qui m'a dirigé vers la bonne bibliothèque à installer. Merci!ldd
, essayez de trouver leplugins/platforms
répertoire dans votre installation Qt. Essayez de copier tout ce répertoire au même endroit que votre fichier de bibliothèque binaire ou partagé. Si cela fonctionne, vous pouvez définirLD_LIBRARY_PATH
(hacky) ou, comme mentionné dans la réponse par @bossbarber,QT_QPA_PLATFORM_PLUGIN_PATH
.Comme indiqué précédemment, vous devez vous assurer d'installer les plugins de plate-forme lorsque vous déployez votre application. Selon la façon dont vous souhaitez déployer les choses, il existe deux méthodes pour indiquer à votre application où se trouvent les plugins de la plate-forme (par exemple, plates-formes / plugins / libqxcb.so) au moment de 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.
ou
L'autre option, que je préfère, est de créer un fichier qt.conf dans le même répertoire que votre exécutable. Le contenu serait:
Plus d'informations à ce sujet peuvent être trouvées ici et à l'aide de qt.conf
la source
LD_LIBRARY_PATH
ne fonctionnait pas, mais nous avonsQT_QPA_PLATFORM_PLUGIN_PATH
fait l'affaire. Merci beaucoup.J'ai essayé de démarrer mon binaire, compilé avec Qt
5.7
, sur Ubuntu 16.04 LTS où Qt5.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 delibqxcb.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:
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 (doncLD_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
.la source
Ubuntu 16.04 64 bits. J'ai eu le problème sans raison apparemment. La nuit précédente, j'ai regardé un film sur mon instance VideoLan, cette nuit-là, j'aimerais en regarder un autre avec VideoLan. VLC ne voulait tout simplement pas s'exécuter à cause de l'erreur dans la question. J'ai un peu google et j'ai trouvé la solution qui a résolu mon problème: désormais, VLC est exécutable comme avant. La solution est cette commande:
sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/
Je ne suis pas en mesure d'expliquer quelles sont ses conséquences, mais je sais que cela crée un lien symbolique manquant.
la source
-f
--force
drapeau tant que vous ne savez pas vraiment ce que vous faites. Cela peut entraîner d'autres problèmes.J'ai essayé les parties principales de chaque réponse, en vain. Ce qui a finalement résolu le problème pour moi, c'est d'exporter les variables d'environnement suivantes:
la source
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/
. Malheureusement, il n'a corrigé que mon VLC, pas Virtualbox qui a la même erreur ...Depuis la version 5, Qt utilise un système d'abstraction de plate - forme (QPA) pour extraire de la plate-forme sous-jacente.
L'implémentation pour chaque plateforme est assurée par des plugins. Pour X11, c'est le plugin XCB. Voir Qt pour les exigences X11 pour plus d'informations sur les dépendances.
la source
Cela aidera probablement. J'utilise Ubuntu 18.04 et quand j'ai installé Krita en utilisant la méthode ppa. J'ai eu cette erreur:
J'ai essayé toutes les solutions que j'ai trouvées dans ce fil et d'autres sites Web 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 simple commande:
Après avoir ajouté cette commande, je lance à nouveau krita, j'ai eu la même erreur, mais maintenant je connais la cause.
Cette erreur empêche le "xcb" de se charger correctement. La solution sera donc d'installer le `libxcb-xinerama.so.0", n'est-ce pas? Cependant, lorsque j'exécute la commande:
I la lib a été installée. Alors j'ai utilisé un vieux truc ouais
--reinstall
Cette dernière commande a résolu mon problème.
la source
Il peut y avoir plusieurs causes à ce problème. La clé est d'utiliser
avant d'exécuter votre application Qt. Ensuite, inspectez la sortie, qui vous indiquera la direction de l'erreur. Dans mon cas, c'était:
Mais cela est résolu dans différents threads. Voir par exemple https://stackoverflow.com/a/50097275/2408964 .
la source
J'ai rencontré le même problème après avoir installé Viber. Il contenait toutes les bibliothèques qt requises au format
/opt/viber/plugins/
. J'ai vérifié les dépendances/opt/viber/plugins/platforms/libqxcb.so
et trouvé des dépendances manquantes. Ils étaientlibxcb-render.so.0
,libxcb-image.so.0
,libxcb-icccm.so.4
,libxcb-xkb.so.1
donc je résolu mon problème en installant des paquets manquants avec ces bibliothèques:apt-get install libxcb-xkb1 libxcb-icccm4 libxcb-image0 libxcb-render-util0
la source
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 ne fonctionnait comme l'installation de bibliothèques xcb ou l'exportation du dossier des plugins Qt. 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 - au lieu de cela, j'obtenais quelque chose sur les symboles non résolus dans Qt5Core.Cela m'a donné un indice, cependant: que se passe-t-il s'il essaie d'utiliser différents fichiers provenant de différentes installations Qt? Sur ma machine, j'avais la version standard installée dans
/home/username/Qt/
et certaines versions locales de mon projet que j'ai compilées par moi-même (j'ai également d'autres kits personnalisés à d'autres endroits). Chaque fois que j'essayais d'utiliser l'un des kits (installés par l'outil de maintenance Qt ou construits par moi-même), j'obtenais une "erreur xcb".La solution était simple: fournir le chemin Qt à travers
CMAKE_PREFIX_PATH
et non pasQt5_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
la source
J'ai rencontré un problème très similaire avec le même message d'erreur. Commencez par en déboguer en allumant l'imprimante Qt Debug avec la commande de ligne de commande:
et réexécutez l'application. Pour moi, cela a révélé ce qui suit:
"Impossible de charger la bibliothèque /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: impossible d'ouvrir le fichier d'objet partagé: Aucun fichier ou répertoire de ce nom)"
"Impossible de charger la bibliothèque /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: impossible d'ouvrir le fichier d'objet partagé: Aucun fichier ou répertoire de ce nom)"
En effet, il me manquait libxkbcommon-x11.so.0 et libxkbcommon-x11.so.0. Ensuite, vérifiez votre architecture en utilisant dpkg à partir de la ligne de commande Linux. (Pour moi, la commande "arch" a donné un résultat différent et inutile)
J'ai ensuite googlé "libxkbcommon-x11.so.0 ubuntu 18.04 amd64", et de même pour libxkbcommon-x11.so.0, qui donne ces paquets sur packages.ubuntu.com. Cela m'a dit, rétrospectivement sans surprise, il me manquait des paquets appelés libxkbcommon-x11-0 et libxkbcommon0, et que l'installation de ces paquets inclurait les fichiers nécessaires, mais pas les versions de développement. Puis la solution:
la source
Dans mon cas, j'avais besoin de déployer deux applications Qt sur un invité Ubuntu virtualbox. L'un était en ligne de commande ("app"), l'autre basé sur l'interface graphique ("app_GUI").
J'ai utilisé "ldd app" pour savoir quelles sont les bibliothèques requises, et je les ai copiées sur 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 "Échec du chargement du plugin de plate-forme" xcb ". J'ai vérifié ldd pour libxcb.so, mais il n'y avait pas non plus de dépendances manquantes.
Le problème semblait être qu'alors que je copiais toutes les bonnes bibliothèques, j'avais accidentellement copié aussi des bibliothèques qui étaient déjà présentes sur le système invité ... ce qui signifie que (a) il n'était pas nécessaire de les copier en premier lieu et (b) pire , leur copie a produit 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 aucune bibliothèque supplémentaire .
la source
Dans mon cas, les fichiers d'en-tête manquants étaient la raison pour laquelle
libxcb
Qt n'a pas été construit. Les installer selon https://wiki.qt.io/Building_Qt_5_from_Git#Linux.2FX11 a résolu le problème:la source
J'aime la solution avec
qt.conf
.Mettez
qt.conf
près de l'exécutable avec les lignes suivantes:Et ça marche comme un charme: ^)
Pour un exemple de travail:
La documentation à ce sujet est ici: https://doc.qt.io/qt-5/qt-conf.html
la source
cd path/to/executable; vim qt.conf
, pâte. Sauvegarder et quitter.Je lie statiquement tous les éléments de Qt aux versions Linux génériques de mes projets open source. Cela rend la vie un peu plus facile. Il vous suffit de créer d'abord des versions statiques des bibliothèques Qt. Bien sûr, cela ne peut pas être appliqué aux logiciels à code source fermé 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 référentiels de packages.
la source
J'ai eu ce problème, et sur une intuition, j'ai supprimé les configurations Qt de mon environnement. C'est à dire,
Ensuite, j'ai lancé qtcreator et il s'est reconfiguré avec l'état existant de la machine. Il ne me rappelait plus où étaient mes projets, mais cela signifiait simplement que je devais les parcourir à nouveau «pour la première fois».
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 les exécutables de mon projet sans que les bibliothèques xcb ou qxcb ne disparaissent.
la source
sudo ln -sf /usr/lib/...."adapt-it"..../qt5/plugins/platforms/ / usr / bin /
Il crée le lien symbolique qu'il a manqué. Bon pour QT! Bon pour VLC !!
la source