"Impossible de charger le plug-in de plate-forme" xcb "" lors du lancement de l'application qt5 sur Linux sans qt installé

101

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é?

locomotion
la source
1
Juste pour clarifier, les bibliothèques Qt sont-elles réellement installées?
cmannett85
1
Si la bibliothèque Qt est installée, le programme fonctionne normalement. S'il n'est pas installé ou si le répertoire qt sdk n'est pas trouvé, le programme ne fonctionne pas.
locomotion le
Assurez-vous de copier également libQt5Gui.so.5
edaniels
1
Pour ceux qui viennent ici depuis le lanceur Eve Online: Utilisez eveonline.sh, non eveonline- le lanceur a toutes les bibliothèques regroupées avec des versions spéciales.
Ondra Žižka

Réponses:

59

Utilisez ldd (man ldd) pour afficher les dépendances de bibliothèques partagées. Exécuter ceci 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.

Abe Mishler
la source
1
Je vous remercie! C'est exactement ce qu'était le problème. libQt5DBus.so.5 doit être répertorié dans la documentation avec le noyau et l'interface graphique.
dzlatkov
4
Dans mon cas, sudo apt-get install libx11-xcb1résolu le problème. Mais votre recommandation d'utiliser lddétait ce qui m'a dirigé vers la bonne bibliothèque à installer. Merci!
Daniel
4
Dans mon cas, j'ai également dû ajouter libQt5XcbQpa.so.5 dans le dossier lib.
elsamuko
4
Si vous rencontrez toujours ce problème après avoir terminé ldd, essayez de trouver le plugins/platformsré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éfinir LD_LIBRARY_PATH(hacky) ou, comme mentionné dans la réponse par @bossbarber, QT_QPA_PLATFORM_PLUGIN_PATH.
csl
1
Dans mon cas, je n'ai pas créé le répertoire / usr / bin / plates-formes. Résolu avec: sudo ln -sf / usr / lib / x86_64-linux-gnu / qt5 / plugins / plates-formes / / usr / bin /
gipsh
55

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.

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 de créer un fichier qt.conf dans le même répertoire que votre exécutable. Le contenu serait:

[Paths]
Plugins=/path/to/plugins

Plus d'informations à ce sujet peuvent être trouvées ici et à l'aide de qt.conf

barbier
la source
1
Hou la la! Merci beaucoup! Je ne savais pas sur qt.conf, il devrait sur la première page de la FAQ sur le déploiement
dans mon cas, pour une raison quelconque, le chemin à l'intérieur du qt.conf (Plugins = plugins) n'a pas été reconnu. J'ai fini par fournir un fichier qt.conf vide, qui permet d'écraser les chemins globaux (codés en dur) par les valeurs par défaut de qt.conf, dans mon cas, le sous-dossier plugins dans le répertoire app.
B Piltz
1
Nous nous demandions pourquoi LD_LIBRARY_PATHne fonctionnait pas, mais nous avons QT_QPA_PLATFORM_PLUGIN_PATHfait l'affaire. Merci beaucoup.
Ahmed Fasih
1
2ème ou 3ème fois que j'arrive à cette réponse et ça aide à chaque fois.
kyb
26

J'ai essayé de démarrer mon binaire, compilé avec Qt 5.7, sur Ubuntu 16.04 LTS où Qt 5.5est préinstallé. Ça n'a pas marché.

Au début, j'ai inspecté le binaire lui-même avec lddcomme 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 platformsré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=1une variable d'environnement définie pour vérifier quelles dépendances de libqxcb.sone 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.5bibliothè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.

Neurotransmetteur
la source
1
J'ai trouvé que même s'il y avait des dépendances non spécifiées sur libQt5xcbQpa.so.5 et libQtDBus.so.5, je devais toujours ajouter le dossier de plates-formes comme vous l'indiquez. Cette combinaison l'a fait fonctionner.
BSD
Quelqu'un peut-il me diriger vers l'explication «Pour les nuls» sur la façon de corriger cette erreur? Je n'ai aucune idée de ce que cela signifie, j'ai besoin d'instructions étape par étape pour résoudre ce problème sous Linux.
John Smith
@JohnSmith, c'est mieux si vous nous dites ce qui n'a pas de sens pour vous. Ensuite, nous essaierons d'élaborer.
Neurotransmetteur
11

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.

Francesco
la source
2
N'utilisez pas le -f --forcedrapeau tant que vous ne savez pas vraiment ce que vous faites. Cela peut entraîner d'autres problèmes.
kyb
C'est ce qui m'a permis de résoudre le problème avec Ubuntu 18.04 (l'application ayant le problème est Rescue Time.) Laissez simplement l'indicateur -f au cas où vous auriez déjà un répertoire là-bas.
Eloff le
10

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:

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/ 
Alan
la source
Cela a fonctionné pour moi sur Ubuntu 17.10 (mais ayant ce problème depuis 16.04!) 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 ...
Tails
Travailler dans Ubuntu 18.04 pour que texworks 0.6.2 soit opérationnel.
XavierStuvw
8

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.

cloose
la source
Alors, j'ai juste besoin d'installer tous les packages de la liste des dépendances? Et cela fonctionnera? J'ai également trouvé le fichier libqxcb.so dans le répertoire QT SDK, mais le placer dans le répertoire usr / lib ne résout pas mon problème.
locomotion le
La page Déploiement d'une application sur des plates-formes X11 doit contenir toutes les informations dont vous avez besoin.
clôture le
J'ai installé tous les packages mentionnés sur cette page, mais cela n'a pas aidé. J'ai trouvé l'information, que les plugins de plate-forme doivent être dans le répertoire de l'exécutable dans le dossier "plates-formes". J'ai mis le plugin xcb, maintenant l'erroe a changé: "Impossible de charger le plugin de plate-forme" xcb ". Les plates-formes disponibles sont: xcb"
locomotion
1
@cloose It is dead again :(
user89
@ user89 pas pour moi. problème temporaire peut-être?
clôture
6

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:

Le démarrage de cette application a échoué, car elle n'a pas pu trouver ni charger le plugin de la plate-forme Qt "xcb" dans "".

Les plugins de plateforme disponibles sont: linuxfb, minimal, minimalegl, offscreen, wayland-egl, wayland, xcb.

Réinstaller l'application peut résoudre ce problème. Avorté

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:

export QT_DEBUG_PLUGINS=1

Après avoir ajouté cette commande, je lance à nouveau krita, j'ai eu la même erreur, mais 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. La solution sera donc d'installer le `libxcb-xinerama.so.0", n'est-ce pas? Cependant, lorsque j'exécute la commande:

sudo apt install libxcb-xinerama

I la lib a été installée. Alors j'ai utilisé un vieux truc ouais--reinstall

sudo apt install --reinstall libxcb-xinerama

Cette dernière commande a résolu mon problème.

Teocci
la source
6

Il peut y avoir plusieurs causes à ce problème. La clé est d'utiliser

export QT_DEBUG_PLUGINS=1

avant d'exécuter votre application Qt. Ensuite, inspectez la sortie, qui vous indiquera la direction de l'erreur. Dans mon cas, c'était:

Cannot load library /opt/nao/plugins/platforms/libqxcb.so: (/opt/nao/bin/../lib/libz.so.1: version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16))

Mais cela est résolu dans différents threads. Voir par exemple https://stackoverflow.com/a/50097275/2408964 .

jusqu'à
la source
: facepalm: OMG, ce même conseil ENCORE. Non, cela ne fournit aucune information utile, juste une version beaucoup plus détaillée de la même erreur exacte. Aucun indice ou indice pour quoi que ce soit d'autre à regarder. Rien de manquant, rien de "ne peut pas charger" que je ne connaissais pas déjà.
John Smith
2

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.soet trouvé des dépendances manquantes. Ils étaient libxcb-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

Sergey P. alias azur
la source
J'ai eu un problème lors du lancement de Tizen Emulator. Cela a aidé. Merci.
AlexM
2

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'utiliserQT_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_PATHet non pas Qt5_DIRcomme 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

Vicrucann
la source
Oh, mec, qu'en est-il du monde Linux, où chaque solution sur le Web fournit des erreurs inattendues au lieu de fonctionner? Déjà? Trois jours maintenant à essayer d'obtenir un bureau fonctionnel sur une installation d'origine d'Ubuntu. Non, pour ceux qui viennent ici de Google: cette solution ne fonctionne pas mieux que toute autre chose sur cette page. Je commence à penser que Linux ne fonctionne pas du tout.
John Smith
2

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:

export QT_DEBUG_PLUGINS = 1

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)

dpkg --print-architecture #résultat pour moi: amd64

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:

sudo apt-get mise à jour

sudo apt-get install libxkbcommon0

sudo apt-get install libxkbcommon-x11-0

Schroeder
la source
1

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 .

Giorgos Sfikas
la source
Et, je résout mon problème en utilisant ces conseils, comment?
John Smith
1

Dans mon cas, les fichiers d'en-tête manquants étaient la raison pour laquelle libxcbQt 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:

yum install libxcb libxcb-devel xcb-util xcb-util-devel mesa-libGL-devel libxkbcommon-devel
Woltan
la source
1
Ouais, je pense que j'ai eu un problème similaire. Même qt compilé à partir des sources, mais je n'ai pas remarqué que la chaîne d'outils xcb n'était pas saine sur mon système, de sorte que les parties qt-xcb n'ont pas été installées.
shevy
1

J'aime la solution avec qt.conf.

Mettez qt.confprès de l'exécutable avec les lignes suivantes:

[Paths]
Prefix = /path/to/qtbase

Et ça marche comme un charme: ^)

Pour un exemple de travail:

[Paths]
Prefix = /home/user/SDKS/Qt/5.6.2/5.6/gcc_64/

La documentation à ce sujet est ici: https://doc.qt.io/qt-5/qt-conf.html

kyb
la source
Et je "mets qt.conf près de l'exécutable" comment, exactement?
John Smith
Créez un fichier avec le contenu présenté. cd path/to/executable; vim qt.conf, pâte. Sauvegarder et quitter.
kyb
0

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.

Juzzlin
la source
0

J'ai eu ce problème, et sur une intuition, j'ai supprimé les configurations Qt de mon environnement. C'est à dire,

rm -rf ~/.config/Qt*

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.

Blair Houghton
la source
Qtcreator donne la même erreur exacte que j'essaie de résoudre. Bien sûr. Parce que si je trouvais une solution de travail à un problème Linux sur le Web, ce ne serait pas Linux. Désolé, c'est incroyablement frustrant, une page SE entière de poursuites d'oie sauvage sans une seule solution utilisable pour simplement faire fonctionner un panneau de bureau sur une installation Ubuntu stock sans erreurs. Je commence à douter que Linux fonctionne vraiment bien.
John Smith
Cela n'a pas aidé dans mon cas.
Eugene Gr. Philippov
-4

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 !!

jujuuj
la source
2
expliquez votre réponse
Anantha Raju C
Ça ne marche pas. Parce que rien ne marche. Cette page est 100% fausse, même pas une seule des «solutions» ici ne fonctionne.
John Smith
@JohnSmith à en juger par le nombre de votes positifs sur les réponses, certains d'entre eux fonctionnent certainement pour certaines personnes. Malheureusement, rien ne fonctionne pour vous et je peux comprendre votre frustration. Mais si rien ne fonctionne, essayez de faire vos propres recherches et soumettez une réponse qui a fonctionné dans votre cas. Je veux dire, allez, vous utilisez la plateforme depuis 5 ans et n'avez que 6 réponses? Je suggérerais humblement de redonner à la communauté au lieu de me plaindre. Nous sommes là pour nous entraider.
Neurotransmetteur