web-dev-qa-db-fra.com

"Échec du chargement du plug-in de plate-forme" xcb "" lors du lancement de l'application qt5 sur linux sans que qt soit installé

J'ai écrit une application pour Linux qui utilise Qt5.

Mais lorsque j'essaye de le lancer sur le Linux sans Qt SDK installé, la sortie dans la console est:

Impossible de charger le 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 plug-in? 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 des fichiers du répertoire Qt ...

UPDATE: Lorsque je crée dans le dossier "platform" du répertoire de l'application avec le fichier libqxcb.so , l'application ne démarre toujours pas, mais le message d'erreur change:

Impossible de charger le plug-in de plate-forme "xcb". Les plates-formes disponibles sont:

xcb

Comment cela peut-il arriver? Comment un plugin de plateforme peut-il être disponible mais ne peut pas être chargé?

77
locomotion

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

48
Abe Mishler

Comme indiqué précédemment, vous devez vous assurer d'installer les plug-ins de plate-forme lors du déploiement de votre application. En fonction de la manière dont vous souhaitez déployer les éléments, il existe deux méthodes pour indiquer à votre application où se trouvent les plug-ins de plateforme (par exemple, plates-formes/plugins/libqxcb.so), ce qui peut fonctionner pour vous.

La première consiste à exporter le chemin d'accès au 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, consiste à créer un fichier qt.conf dans le même répertoire que votre exécutable. Le contenu de ce qui serait:

[Paths]
Plugins=/path/to/plugins

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

45
bossbarber

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é. Comme prévu, cela n'a pas fonctionné tel quel.

Au début, j'ai inspecté le binaire lui-même avec ldd comme suggéré ici, et j'ai satisfait toutes les dépendances "non trouvées". Ensuite, cette erreur notoire This application failed to start because it could not find or load the Qt platform plugin "xcb" a été générée.

Que devrait-on faire sous Linux pour résoudre ce problème

Au début, vous devriez créer le répertoire platforms où se trouve votre binaire, car c’est l’endroit où Qt cherche la bibliothèque XCB. Copiez libqxcb.so ici. Je me demande pourquoi les auteurs d'autres réponses n'ont pas mentionné cela.

Ensuite, vous pouvez exécuter votre binaire avec la variable d’environnement QT_DEBUG_PLUGINS=1 définie pour vérifier les dépendances de libqxcb.so non satisfaites. (Vous pouvez également utiliser ldd pour cela comme suggéré dans la réponse acceptée).

La sortie de 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-le dans le chemin de vos bibliothèques, dans mon cas, c'était le même répertoire que celui où se trouve mon binaire (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.

19
TranslucentCloud

Ubuntu 16.04 64bit . J'ai eu le problème pour apparemment aucune raison. La nuit précédente, j’ai visionné un film sur mon exemple VideoLan. Ce soir-là, j’aimerais en regarder un autre avec VideoLan. VLC ne voulait tout simplement pas fonctionner à 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: à partir de maintenant, VLC est lancable comme avant. La solution est la suivante:

Sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/

Je ne suis pas en mesure d'expliquer quelles en sont les conséquences, mais je sais que cela crée un chaînon manquant.

9
Francesco

Depuis la version 5, Qt utilise un système d'abstraction platform (QPA) pour résumer de la plateforme 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.

8
cloose

J'ai essayé les parties principales de chaque réponse, en vain. Ce qui a finalement été résolu pour moi, c’é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/ 
8
Alan

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:

Cette application n'a pas pu démarrer car elle n'a pas pu trouver ou charger le plug-in de la plate-forme Qt "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. 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 article 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 relance krita J'ai la même erreur que maintenant, je connais la cause.

libxcb-xinerama.so.0: impossible d'ouvrir le fichier d'objet partagé: aucun fichier ou répertoire de ce type.

Cette erreur empêche le "xcb" de se charger correctement. Donc, la solution sera d'installer le `libxcb-xinerama.so.0" non? Cependant, quand j'exécute la commande:

Sudo apt install libxcb-xinerama

Je la bibliothèque 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.

2
Teocci

Dans mon cas, je devais 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à l'invité Ubuntu. Alors que l'exécutable en ligne de commande "app" fonctionnait correctement, l'exécutable basé sur une interface graphique s'est écrasé, donnant à Le message d'erreur "Impossible de charger le plugin de plate-forme" xcb ". J'ai vérifié ldd pour libxcb. oui, mais cela aussi n'avait pas de dépendances manquantes.

Le problème semblait être que, même si je copiais toutes les bonnes bibliothèques, j'avais accidentellement copié aussi des bibliothèques déjà présentes sur le système invité. Ce qui signifie (a) qu’elles étaient inutiles pour les copier au départ et (b) pire , leur copie produisait des incompatibilités entre les bibliothèques d’installation ... Pire encore, elles étaient indétectables de la part de ldd, comme je l’ai dit plus tôt.

La solution? Assurez-vous que vous copiez les bibliothèques affichées comme manquantes par ldd et absolument aucune bibliothèque supplémentaire.

1
Giorgos Sfikas

J'ai rencontré le même problème après avoir installé Viber. Il contenait 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. C'étaient les suivants: libxcb-render.so.0, libxcb-image.so.0, libxcb-icccm.so.4, libxcb-xkb.so.1Alors j'ai résolu mon problème en installant des packages manquants avec cette bibliothèque:

apt-get install libxcb-xkb1 libxcb-icccm4 libxcb-image0 libxcb-render-util0

1

J'ai donc passé environ une journée à essayer de comprendre quel était le problème; essayé toutes les solutions proposées, mais rien de cela n’a fonctionné comme l’installation de librairies xcb ou l’exportation du dossier des plugins Qt. La solution qui suggérait d'utiliser QT_DEBUG_PLUGINS=1 pour déboguer le problème ne me fournissait pas un aperçu direct, comme dans la réponse. J'obtenais plutôt quelque chose à propos des symboles non résolus dans Qt5Core. 

Cela me donne cependant un indice: que se passera-t-il si vous essayez d'utiliser différents fichiers provenant de différentes installations de Qt? J'avais sur ma machine une version standard installée dans /home/username/Qt/ et des constructions locales dans mon projet que j'avais compilées par moi-même (d'autres kits sur mesure ont également été installés à 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: fournissez le chemin Qt via CMAKE_PREFIX_PATH et non pas si Qt5_DIR comme je l’ai fait, et le problème a été résolu. Exemple:

cmake .. -DCMAKE_PREFIX_PATH=/home/username/Qt/5.11.1/gcc_64

1
vicrucann

J'ai eu ce problème, et sur un pressentiment, j'ai supprimé la configuration 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 se souvenait plus où étaient mes projets, mais cela signifiait simplement que je devais de nouveau les consulter «pour la première fois».

Mais plus important encore, il s'est construit un ensemble cohérent de chemins de bibliothèque, ce qui m'a permis de reconstruire et d'exécuter les exécutables de mon projet sans les bibliothèques xcb ou qxcb manquantes.

0
Blair Houghton

Je lie tous les éléments Qt de manière statique aux versions génériques Linux de mes projets open source. Cela rend la vie un peu plus facile. Vous devez d’abord créer des versions statiques des bibliothèques Qt. Bien sûr, cela ne peut pas être appliqué aux logiciels à source fermée en raison de problèmes de licence. Le déploiement d'applications Qt5 sur Linux pose actuellement quelques problèmes, car Ubuntu 12.04, par exemple, n'a pas de bibliothèque Qt5 dans les référentiels de paquets.

0
juzzlin

J'aime la solution avec qt.conf .

Placez qt.conf près de l'exécutable avec les lignes suivantes:

[Paths]
Prefix = /path/to/qtbase

Et ça marche comme un charme: ^)

0
kyb

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

export QT_DEBUG_PLUGINS=1

avant de lancer votre application Qt. Ensuite, inspectez la sortie, ce 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 .

0
untill