Ich habe eine Anwendung für Linux geschrieben, die Qt5 verwendet.
Aber wenn ich versuche, es unter Linux ohne installiertes Qt SDK zu starten, lautet die Ausgabe in der Konsole:
Fehler beim Laden des Plattform-Plugins "xcb". Verfügbare Plattformen sind:
Wie kann ich das beheben? Möglicherweise muss ich eine Plugin-Datei kopieren? Wenn ich Ubuntu mit installiertem Qt5 verwende, aber das Qt-Verzeichnis umbenenne, tritt das gleiche Problem auf. Es wird also eine Datei aus dem Qt-Verzeichnis verwendet ...
UPDATE: Wenn ich im Ordner "Plattformen" des App-Verzeichnisses mit der Datei libqxcb.so erstelle , wird die App immer noch nicht gestartet, aber die Fehlermeldung ändert sich:
Fehler beim Laden des Plattform-Plugins "xcb". Verfügbare Plattformen sind:
xcb
Wie kann das passieren? Wie kann das Plattform-Plugin verfügbar sein, aber nicht geladen werden?
eveonline.sh
nichteveonline
- der Launcher hat alle Bibliotheken mit speziellen Versionen gebündelt.Antworten:
Verwenden Sie ldd (man ldd), um Abhängigkeiten von gemeinsam genutzten Bibliotheken anzuzeigen. Führen Sie dies auf libqxcb.so aus
zeigt, dass xcb zusätzlich zu libQt5Core.so.5 und libQt5Gui.so.5 (und vielen anderen Systembibliotheken) von libQt5DBus.so.5 abhängt. Fügen Sie libQt5DBus.so.5 zu Ihrer Sammlung freigegebener Bibliotheken hinzu, und Sie sollten bereit sein, fortzufahren.
quelle
sudo apt-get install libx11-xcb1
das Problem behoben. Ihre Empfehlung zur Verwendung hatldd
mich jedoch auf die richtige zu installierende Bibliothek hingewiesen. Vielen Dank!ldd
, suchen Sie dasplugins/platforms
Verzeichnis in Ihrer Qt-Installation. Versuchen Sie, das gesamte Verzeichnis an den gleichen Ort wie Ihre Binär- oder gemeinsam genutzte Bibliotheksdatei zu kopieren. Wenn das funktioniert, können Sie setzenLD_LIBRARY_PATH
(hacky) oder, wie in der Antwort von @bossbarber erwähnt ,QT_QPA_PLATFORM_PLUGIN_PATH
.Wie bereits erwähnt, müssen Sie sicherstellen, dass Sie die Plattform-Plugins installieren, wenn Sie Ihre Anwendung bereitstellen. Abhängig davon, wie Sie die Dinge bereitstellen möchten, gibt es zwei Methoden, um Ihrer Anwendung mitzuteilen, wo sich die Plattform-Plugins (z. B. Plattformen / Plugins / libqxcb.so) zur Laufzeit befinden, die möglicherweise für Sie funktionieren.
Der erste besteht darin, den Pfad über die Variable QT_QPA_PLATFORM_PLUGIN_PATH in das Verzeichnis zu exportieren.
oder
Die andere Option, die ich bevorzuge, ist das Erstellen einer qt.conf-Datei im selben Verzeichnis wie Ihre ausführbare Datei. Der Inhalt davon wäre:
Weitere Informationen hierzu finden Sie hier und unter qt.conf
quelle
LD_LIBRARY_PATH
es nicht funktioniert hat, aber wir haben es geschafftQT_QPA_PLATFORM_PLUGIN_PATH
. Super danke.Ich habe versucht, meine mit Qt kompilierte Binärdatei unter
5.7
Ubuntu 16.04 LTS zu starten , auf der Qt5.5
vorinstalliert ist. Es hat nicht funktioniert.Zuerst habe ich die Binärdatei selbst überprüft,
ldd
wie hier vorgeschlagen, und alle "nicht gefundenen" Abhängigkeiten "erfüllt". Dann wurde dieser berüchtigteThis application failed to start because it could not find or load the Qt platform plugin "xcb"
Fehler geworfen.So lösen Sie dies unter Linux
Zunächst sollten Sie ein
platforms
Verzeichnis erstellen, in dem sich Ihre Binärdatei befindet, da Qt dort nach der XCB-Bibliothek sucht. Dort kopierenlibqxcb.so
. Ich frage mich, warum Autoren anderer Antworten dies nicht erwähnt haben.Dann möchten Sie möglicherweise Ihre Binärdatei mit festgelegter
QT_DEBUG_PLUGINS=1
Umgebungsvariable ausführen , um zu überprüfen, welche Abhängigkeiten vonlibqxcb.so
nicht "erfüllt" sind. (Sie können dies auch verwenden,ldd
wie in der akzeptierten Antwort vorgeschlagen).Die Befehlsausgabe kann folgendermaßen aussehen:
Beachten Sie die fehlerhafte
libQt5DBus.so.5
Bibliothek. Kopieren Sie es in Ihren Bibliothekspfad. In meinem Fall war es dasselbe Verzeichnis, in dem sich meine Binärdatei befindet (daherLD_LIBRARY_PATH=.
). Wiederholen Sie diesen Vorgang, bis alle Abhängigkeiten erfüllt sind.PS danke an den Autor dieser Antwort für
QT_DEBUG_PLUGINS=1
.quelle
Ubuntu 16.04 64bit. Ich habe das Problem anscheinend ohne Grund bekommen. In der Nacht, bevor ich einen Film auf meiner VideoLan-Instanz gesehen habe, möchte ich in dieser Nacht einen weiteren mit VideoLan sehen. VLC wollte wegen des Fehlers in der Frage einfach nicht laufen. Ich google ein bisschen und habe die Lösung gefunden, mit der mein Problem gelöst wurde: Von nun an kann VLC wie zuvor ausgeführt werden. Die Lösung ist dieser Befehl:
sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/
Ich kann nicht erklären, welche Konsequenzen dies hat, aber ich weiß, dass dadurch eine fehlende symbolische Verbindung entsteht.
quelle
-f
--force
Flagge erst, wenn Sie wirklich wissen, was Sie tun. Dies kann andere Probleme verursachen.Ich habe die Hauptteile jeder Antwort ohne Erfolg ausprobiert. Was es für mich endgültig behoben hat, war das Exportieren der folgenden Umgebungsvariablen:
quelle
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/
. Leider hat es nur meinen VLC behoben, nicht Virtualbox, die den gleichen Fehler hat ...Seit Version 5 verwendet Qt ein Plattformabstraktionssystem (QPA), um von der zugrunde liegenden Plattform zu abstrahieren.
Die Implementierung für jede Plattform erfolgt über Plugins. Für X11 ist es das XCB-Plugin. Weitere Informationen zu den Abhängigkeiten finden Sie unter Qt für X11-Anforderungen .
quelle
Wahrscheinlich wird dies helfen. Ich verwende Ubuntu 18.04 und als ich Krita mit der ppa-Methode installiert habe . Ich habe diesen Fehler erhalten:
Ich habe alle Lösungen, die ich in diesem Thread und anderen Websites gefunden habe, ohne Erfolg ausprobiert.
Schließlich fand ich einen Beitrag, in dem der Autor erwähnte, dass es möglich ist, das von qt5 erzählte Debugging mit diesem einfachen Befehl zu aktivieren:
Nachdem ich diesen Befehl hinzugefügt habe, führe ich erneut krita aus. Ich habe den gleichen Fehler erhalten, wie immer ich jetzt die Ursache kenne.
Dieser Fehler verhindert, dass "xcb" ordnungsgemäß geladen wird. Die Lösung wird also die libxcb-xinerama.so.0 installieren, oder? Wenn ich jedoch den folgenden Befehl ausführe:
Ich die lib wurde installiert. Also habe ich einen alten Trick benutzt, ja
--reinstall
Dieser letzte Befehl hat mein Problem gelöst.
quelle
Es kann viele Ursachen für dieses Problem geben. Der Schlüssel ist zu verwenden
bevor Sie Ihre Qt-Anwendung ausführen. Überprüfen Sie dann die Ausgabe, die Sie auf die Richtung des Fehlers hinweist. In meinem Fall war es:
Das wird aber in verschiedenen Threads gelöst. Siehe zum Beispiel https://stackoverflow.com/a/50097275/2408964 .
quelle
Ich hatte das gleiche Problem, als ich Viber installiert habe. Es hatte alle erforderlichen qt-Bibliotheken in
/opt/viber/plugins/
. Ich habe Abhängigkeiten überprüft/opt/viber/plugins/platforms/libqxcb.so
und fehlende Abhängigkeiten gefunden. Sie warenlibxcb-render.so.0
,libxcb-image.so.0
,libxcb-icccm.so.4
,libxcb-xkb.so.1
gelöst Also ich mein Problem durch fehlende Pakete mit diesen Bibliotheken zu installieren:apt-get install libxcb-xkb1 libxcb-icccm4 libxcb-image0 libxcb-render-util0
quelle
Also verbrachte ich ungefähr einen Tag damit, herauszufinden, worum es ging. Ich habe alle vorgeschlagenen Lösungen ausprobiert, aber nichts davon funktionierte wie die Installation von xcb libs oder das Exportieren des Ordners für Qt-Plugins. Die Lösung, die vorgeschlagen wurde,
QT_DEBUG_PLUGINS=1
um das Problem zu debuggen, lieferte mir keinen direkten Einblick wie in der Antwort - stattdessen bekam ich etwas über ungelöste Symbole in Qt5Core.Das gab mir jedoch einen Hinweis: Was ist, wenn versucht wird, verschiedene Dateien aus verschiedenen Qt-Installationen zu verwenden? Auf meinem Computer war die Standardversion installiert
/home/username/Qt/
und einige lokale Builds in meinem Projekt wurden von mir selbst kompiliert (ich habe auch andere benutzerdefinierte Kits an anderen Orten). Immer wenn ich versuchte, eines der Kits zu verwenden (vom Qt-Wartungstool installiert oder von mir selbst erstellt), wurde ein "xcb-Fehler" angezeigt.Die Lösung war einfach: Geben Sie den Qt-Pfad durch
CMAKE_PREFIX_PATH
und nichtQt5_DIR
wie ich, und das Problem wurde gelöst. Beispiel:cmake .. -DCMAKE_PREFIX_PATH=/home/username/Qt/5.11.1/gcc_64
quelle
Ich bin auf ein sehr ähnliches Problem mit derselben Fehlermeldung gestoßen. Debuggen Sie zunächst einige, indem Sie den Qt-Debug-Drucker mit dem Befehlszeilenbefehl einschalten:
und führen Sie die Anwendung erneut aus. Für mich ergab dies Folgendes:
"Bibliothek /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so kann nicht geladen werden: (libxkbcommon-x11.so.0: Freigegebene Objektdatei kann nicht geöffnet werden: Datei oder Verzeichnis existiert nicht)"
"Bibliothek /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so kann nicht geladen werden: (libxkbcommon-x11.so.0: Freigegebene Objektdatei kann nicht geöffnet werden: Datei oder Verzeichnis existiert nicht)"
In der Tat fehlten mir libxkbcommon-x11.so.0 und libxkbcommon-x11.so.0. Überprüfen Sie als Nächstes Ihre Architektur mit dpkg über die Linux-Befehlszeile. (Für mich ergab der Befehl "arch" ein anderes und nicht hilfreiches Ergebnis)
Ich habe dann "libxkbcommon-x11.so.0 ubuntu 18.04 amd64" gegoogelt, und ebenso für libxkbcommon-x11.so.0, das diese Pakete auf packages.ubuntu.com liefert. Das hat mir im Nachhinein nicht überraschend gesagt, dass mir Pakete mit den Namen libxkbcommon-x11-0 und libxkbcommon0 fehlen und dass die Installation dieser Pakete die erforderlichen Dateien enthält, die Entwicklerversionen jedoch nicht. Dann die Lösung:
quelle
In meinem Fall musste ich zwei Qt-Apps auf einem Ubuntu Virtualbox-Gast bereitstellen. Eine war Kommandozeile ("App"), die andere GUI-basiert ("App_GUI").
Ich habe "ldd app" verwendet, um herauszufinden, welche Bibliotheken erforderlich sind, und sie auf den Ubuntu-Gast kopiert. Während die ausführbare Befehlszeilen-Datei "app" einwandfrei funktionierte, stürzte die auf der GUI basierende ausführbare Datei ab und gab den Fehler "Plattform-Plugin konnte nicht geladen werden" xcb "aus. einwandfrei funktionierte, Ich überprüfte ldd auf libxcb.so, aber auch dies hatte keine fehlenden Abhängigkeiten.
Das Problem schien zu sein, dass ich, während ich alle richtigen Bibliotheken kopierte, versehentlich auch Bibliotheken kopiert hatte, die bereits im Gastsystem vorhanden waren. Dies bedeutete, dass (a) sie überhaupt nicht kopiert werden mussten und (b) schlimmer Das Kopieren führte zu Inkompatibilitäten zwischen den Installationsbibliotheken. Schlimmer noch, sie waren von ldd nicht nachweisbar, wie ich sagte ..
Die Lösung? Stellen Sie sicher, dass Sie Bibliotheken kopieren, die von ldd als fehlend angezeigt werden, und absolut keine zusätzlichen Bibliotheken .
quelle
In meinem Fall fehlten Header-Dateien, weil der Grund
libxcb
nicht von Qt erstellt wurde. Installation gemäß https://wiki.qt.io/Building_Qt_5_from_Git#Linux.2FX11 wurde das Problem behoben:quelle
Ich mag die Lösung mit
qt.conf
.Stellen Sie sich
qt.conf
mit den nächsten Zeilen in die Nähe der ausführbaren Datei:Und es funktioniert wie ein Zauber: ^)
Für ein Arbeitsbeispiel:
Die Dokumentation dazu finden Sie hier: https://doc.qt.io/qt-5/qt-conf.html
quelle
cd path/to/executable; vim qt.conf
, Einfügen. Speichern und schließen.Ich verknüpfe alle Qt-Inhalte statisch mit den generischen Linux-Builds meiner Open Source-Projekte. Es macht das Leben ein bisschen einfacher. Sie müssen nur zuerst statische Versionen von Qt-Bibliotheken erstellen. Dies kann natürlich aufgrund von Lizenzproblemen nicht auf Closed-Source-Software angewendet werden. Die Bereitstellung von Qt5-Apps unter Linux ist derzeit etwas problematisch, da Ubuntu 12.04 beispielsweise keine Qt5-Bibliotheken in den Paket-Repositorys enthält.
quelle
Ich hatte dieses Problem und entfernte ahnungsvoll die Qt-Konfigurationen aus meiner Umgebung. Dh
Dann habe ich qtcreator gestartet und es hat sich mit dem vorhandenen Zustand der Maschine neu konfiguriert. Es erinnerte sich nicht mehr daran, wo sich meine Projekte befanden, aber das bedeutete nur, dass ich "zum ersten Mal" wieder zu ihnen navigieren musste.
Noch wichtiger ist jedoch, dass es sich selbst einen zusammenhängenden Satz von Bibliothekspfaden erstellt hat, sodass ich meine ausführbaren Projektdateien neu erstellen und ausführen kann, ohne dass die xcb- oder qxcb-Bibliotheken fehlen.
quelle
sudo ln -sf /usr/lib/...."adapt-it"..../qt5/plugins/platforms/ / usr / bin /
Es wird die symbolische Verknüpfung erstellt, die übersehen wird. Gut für QT! Gut für VLC !!
quelle