J'ai écrit une application pour Linux qui utilise Qt5.
Mais quand j'essaye de le lancer sur le Linux sans Qt SDK installé, la sortie dans la console est:
Failed to load platform plugin "xcb". Available platforms are:
Comment puis-je réparer cela? Peut-être dois-je 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 ...
J'ai trouvé le fichier libqxcb.so
dans le répertoire Qt SDK, mais le placer dans /usr/lib
n'aide pas.
La solution correcte exécute la commande suivante dans un terminal:
Sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/
Cela crée le lien symbolique qui manque.
À tous les futurs lecteurs qui rencontreront ceci - avant de commencer (dangereusement) à jouer avec des liens symboliques vers des bibliothèques partagées, je suggère fortement que vous exécutiez
export QT_DEBUG_PLUGINS=1
puis relancez l’exécutable défaillant dans le terminal. Lisez le message d'erreur émis par QT, car aucune des solutions ci-dessus ne corrige la cause de cette erreur dans mon cas.
Ma sortie après avoir activé QT_DEBUG_PLUGINS
était:
QFactoryLoader::QFactoryLoader() checking directory path "/opt/PostgreSQL/9.6/pgAdmin 4/bin/platforms" ...
loaded library "/opt/PostgreSQL/9.6/pgAdmin 4/plugins/platforms/libqxcb.so"
QLibraryPrivate::loadPlugin failed on "/opt/PostgreSQL/9.6/pgAdmin 4/plugins/platforms/libqxcb.so" : "Cannot load library /opt/PostgreSQL/9.6/pgAdmin 4/plugins/platforms/libqxcb.so: (/opt/PostgreSQL/9.6/lib/libz.so.1: version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16))"
This application failed to start because it could not find or load the Qt platform plugin "xcb".
Available platform plugins are: xcb.
Reinstalling the application may fix this problem.
Aborted (core dumped)
alors j'ai googlé l'erreur version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16))
et trouvé la solution à cela , ce qui a résolu le problème.
Essayez d’installer le paquet libqt5x11extras5
avec la commande suivante:Sudo apt-get install libqt5x11extras5
Le nom peut être différent. Vous pouvez le comprendre en cherchant:Sudo apt-cache search qt5 | grep 'X11 extras'
et vous obtenez le nom du paquet comme résultat:
libqt5x11extras5 - Qt 5 X11 suppléments
J'ai eu ce message d'erreur en essayant d'exécuter "Stellarium".
Avec strace, j’ai trouvé que le fichier manquant était libxcb-xinerama.so.0
. J'ai dû réinstaller libxcb-xinerama0
pour que cela fonctionne:
Sudo apt-get install --reinstall libxcb-xinerama0
Exécutez ldd sur l'exécutable de votre application pour voir comment il résout les dépendances de la bibliothèque.
C'est aussi une lecture indispensable pour comprendre quelles bibliothèques essentielles sont nécessaires dans le cas simple d'une application graphique:
Dans mon type Ubuntu:
Sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/platforms
peut fonctionner
Pour ceux qui sont toujours bloqués après avoir essayé toutes les autres options disponibles sur Internet, vous pouvez rechercher le chemin exact dans lequel cette notoire libqxcb.so
est recherchée dans , pour l’ouverture/le chargement avec l’application Qt
(VirtualBox-5.2.8
est l’application Qt
dans mon cas), à l’aide de l’outil strace. Dans mon cas, puisque je construisais VirtualBox-5.2.8
à partir de sa source, il cherchait libqxcb.so
à l'emplacement ci-dessous:"...VirtualBox-5.2.8/out/linux.AMD64/release/bin/platforms/"
et non dans les chemins de bibliothèque default
name__, Qt
name__, etc. Ainsi, aucune des vérifications ldd
et autres solutions n'a fonctionné. De plus, la configuration de QT_DEBUG_PLUGINS=1
n'a produit aucun journal supplémentaire.
Exécution de strace sur le binaire VirtualBox que j'ai construit à l'aide de Clang/LLVM sur Ubuntu 17.10 x86_64:
...VirtualBox-5.2.8$ strace ./out/linux.AMD64/release/bin/VirtualBox
.
.
.
access(".../VirtualBox-5.2.8/out/linux.AMD64/release/bin/platforms/.", F_OK) = -1 ENOENT (No such file or directory)
write(2, "Qt FATAL: ", 10Qt FATAL: ) = 10
write(2, "This application failed to start"..., 154This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".
Reinstalling the application may fix this problem.) = 154
.
.
.
C'était mon moment hitting-the-nail-on-its-head
et j'ai créé le symlink
à partir du répertoire installé Qt5.10.1
'platforms
mentionné ci-dessous: "...Qt5.10.1/Tools/QtCreator/lib/Qt/plugins/platforms/"
dans le chemin d'accès recherché qui est "...VirtualBox-5.2.8/out/linux.AMD64/release/bin/"
. Ainsi, VirtualBox-5.2.8
a été créé à partir des sources sous Linux (Ubuntu 17.10 x86_64
) en utilisant Clang/LLVM
, enfin a été lancé avec succès !
En fait, une autre chose intéressante ici est que j'ai construit VirtualBox-5.2.8
entièrement en utilisant Clang/Clang++/LLVM
sur Ubuntu 17.10 x86_64
après un effort important - pour FreeBSD
name__, il existe déjà un port pour construire VirtualBox
en utilisant clang
mais pour Linux, il dépend fortement de GCC
Il a fallu déployer beaucoup d'efforts pour en arriver à ce stade afin de pouvoir générer VirtualBox-5.2.8
à partir de sa source à l'aide de Clang/Clang++/LLVM
sur Ubuntu 17.10 x86_64
pour Linux/AMD64
(Ubuntu 17.10 x86_64
) cible et pour le lancer après avoir résolu d'autres problèmes, ainsi que le notoire libqxcb.so
.
À votre santé.
Courir cela me l'a résolu:
Sudo apt-get --reinstall install libqt5dbus5 \
libqt5widgets5 libqt5network5 libqt5gui5 libqt5core5a \
libdouble-conversion1 libxcb-xinerama0
Voici comment résoudre quelques problèmes lorsque j'utilise l'émulateur sous Ubuntu 18.04.
$ vim ~/.bashrc
Ajoutez les lignes suivantes à la fin du fichier. J'installe mon Android SDK à /opt/Android/Sdk
export Android_HOME=/opt/Android/Sdk
export Android_SDK_ROOT=/opt/Android/Sdk
export Android_AVD_HOME=/home/<your name>/.Android/avd
export LD_LIBRARY_PATH="/opt/Android/Sdk/emulator/lib64:$LD_LIBRARY_PATH"
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins
Il semble qu'il puisse y avoir différentes choses qui manquent derrière tout cela. Dans mon cas (Debian 9.7), QT_DEBUG_PLUGINS = 1 a permis de retrouver les bibliothèques manquantes et
$ Sudo apt-get install libxcb-render-util0 libxcb-image0 libxcb-keysyms1 libxcb-icccm4
résolu le problème.