GNU/Linux >> Tutoriels Linux >  >> Linux

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

Utilisez ldd (man ldd) pour afficher les dépendances de la bibliothèque partagée. 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.


Comme indiqué précédemment, vous devez vous assurer d'installer les plug-ins de la plate-forme lorsque vous déployez votre application. Selon la manière dont vous souhaitez déployer les éléments, il existe deux méthodes pour indiquer à votre application où se trouvent les plugins de 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


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é. Cela n'a pas fonctionné.

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 "non trouvées". Puis ce fameux This application failed to start because it could not find or load the Qt platform plugin "xcb" erreur a été générée.

Comment résoudre ce problème sous Linux

Tout d'abord, vous devez créer platforms répertoire où se trouve votre binaire, car c'est l'endroit où Qt recherche la bibliothèque XCB. Copiez libqxcb.so là. Je me demande pourquoi les auteurs d'autres réponses ne l'ont pas mentionné.

Ensuite, vous voudrez peut-être exécuter votre binaire avec QT_DEBUG_PLUGINS=1 variable d'environnement définie pour vérifier quelles dépendances de libqxcb.so ne sont pas "satisfaits". (Vous pouvez également utiliser ldd pour cela comme suggéré dans la réponse acceptée).

La sortie de la commande peut ressembler à ceci :

[email protected]:/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 le défaut libQt5DBus.so.5 bibliothèque. Copiez-le dans le chemin de vos bibliothèques, dans mon cas, c'était le même répertoire où se trouve mon binaire (d'où 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 .


Linux
  1. Modules du noyau Linux sans lesquels nous ne pouvons pas vivre

  2. Comment ouvrir Appimage sous Linux

  3. Comment tester un paquet sans l'installer sous Linux

  4. Linux - Que se passerait-il si un disque dur tombait en panne pendant que le noyau Linux était en cours d'exécution ?

  5. Kali Linux - Plateforme de test d'intrusion

Historique des correctifs en direct du noyau Linux

Comment répertorier les packages installés sous Linux

11 commandes Linux sans lesquelles je ne peux pas vivre

Erreur d'échec du plug-in Linux VPN - Et maintenant ?

Linux ou Windows :25 choses à savoir pour choisir la meilleure plate-forme

Qu'est-ce que la moyenne de charge sous Linux ?