web-dev-qa-db-de.com

"Fehler beim Laden des Plattform-Plugins" xcb "" beim Starten der qt5-App unter Linux, ohne dass qt installiert wurde

Ich habe eine Anwendung für Linux geschrieben, die Qt5 verwendet.

Wenn ich jedoch versuche, es unter Linux ohne Qt SDK zu starten, wird in der Konsole Folgendes ausgegeben:

Fehler beim Laden des Plattform-Plugins "xcb". Verfügbare Plattformen sind:

Wie kann ich das beheben? Möglicherweise muss ich einige Plugin-Dateien kopieren? Wenn ich Ubuntu mit Qt5 installiere, das Qt-Verzeichnis jedoch umbenenne, tritt dasselbe Problem auf. Also, es verwendet eine Datei aus dem Qt-Verzeichnis ...

UPDATE: Wenn ich im Ordner "app dir" "platform" 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?

77
locomotion

Verwenden Sie ldd (man ldd), um Abhängigkeiten der gemeinsam genutzten Bibliothek anzuzeigen. Läuft dies auf libqxcb.so 

.../platforms$ ldd libqxcb.so

zeigt, dass xcb neben libQt5Core.so.5 und libQt5Gui.so.5 (und vielen anderen Systembibliotheken) von libQt5DBus.so.5 abhängig ist. Fügen Sie libQt5DBus.so.5 zu Ihrer Sammlung freigegebener Bibliotheken hinzu und Sie sollten bereit sein, damit fortzufahren.

48
Abe Mishler

Wie bereits erwähnt, müssen Sie sicherstellen, dass Sie die Plattform-Plugins installieren, wenn Sie Ihre Anwendung bereitstellen. Je nachdem, wie Sie die Bereitstellung durchführen möchten, gibt es zwei Methoden, mit denen Sie Ihrer Anwendung mitteilen können, wo sich die Plattform-Plugins (z. B. Plattformen/plugins/libqxcb.so) zur Laufzeit befinden, die möglicherweise für Sie funktionieren.

Die erste besteht darin, den Pfad über die Variable QT_QPA_PLATFORM_PLUGIN_PATH in das Verzeichnis zu exportieren.

QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins ./my_qt_app

oder

export QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins
./my_qt_app

Die andere Option, die ich vorziehen möchte, ist das Erstellen einer Datei "qt.conf" in demselben Verzeichnis wie Ihre ausführbare Datei. Der Inhalt davon wäre:

[Paths]
Plugins=/path/to/plugins

Weitere Informationen dazu finden Sie hier und unter qt.conf

45
bossbarber

Ich habe versucht, meine mit Qt 5.7 kompilierte Binärdatei auf Ubuntu 16.04 LTS zu starten, auf der Qt 5.5 vorinstalliert ist. Erwartungsgemäß hat es nicht so funktioniert.

Zuerst habe ich die Binärdatei selbst mit ldd geprüft, wie hier vorgeschlagen wurde, und alle Abhängigkeiten "nicht gefunden" befriedigt. Dann wurde dieser notorische This application failed to start because it could not find or load the Qt platform plugin "xcb"-Fehler eingeworfen.

Was sollte unter Linux unternommen werden, um das Problem zu lösen

Zuerst sollten Sie das platforms-Verzeichnis erstellen, in dem sich Ihre Binärdatei befindet, da Qt die XCB-Bibliothek sucht. Kopieren Sie dort libqxcb.so. Ich frage mich, warum Autoren anderer Antworten dies nicht erwähnt haben.

Dann möchten Sie möglicherweise Ihre Binärdatei mit der Umgebungsvariablen QT_DEBUG_PLUGINS=1 ausführen, um zu überprüfen, welche Abhängigkeiten von libqxcb.so nicht erfüllt sind. (Sie können auch ldd verwenden, wie in der akzeptierten Antwort vorgeschlagen).

Die Befehlsausgabe kann folgendermaßen aussehen:

[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)

Beachten Sie die fehlerhafte libQt5DBus.so.5-Bibliothek. Kopieren Sie es in Ihren Bibliothekspfad. In meinem Fall war es das gleiche Verzeichnis, in dem sich meine Binärdatei befindet (daher LD_LIBRARY_PATH=.). Wiederholen Sie diesen Vorgang, bis alle Abhängigkeiten erfüllt sind. 

P.S. Danke an den Autor von diese Antwort für QT_DEBUG_PLUGINS=1.

19

Ubuntu 16.04 64bit . Ich habe das Problem aus scheinbar keinen Gründen bekommen. In der Nacht bevor ich einen Film in meiner VideoLan-Instanz gesehen habe, möchte ich an diesem Abend einen anderen mit VideoLan sehen. VLC wollte einfach nicht wegen des Fehlers in die Frage laufen. Ich google ein bisschen und ich habe die Lösung gefunden, die mein Problem gelöst hat: Ab jetzt ist VLC wie zuvor lauffähig. 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 Folgen das hat, aber ich weiß, dass es einen fehlenden symbolischen Link schafft.

9
Francesco

Seit Version 5 verwendet Qt ein Plattform-Abstraktionssystem (QPA) , um von der zugrunde liegenden Plattform zu abstrahieren.

Die Implementierung für jede Plattform wird durch Plugins bereitgestellt. Für X11 ist es das XCB-Plugin. Siehe Qt für X11-Anforderungen für weitere Informationen zu den Abhängigkeiten.

8
cloose

Ich habe die Hauptteile jeder Antwort ausprobiert, ohne Erfolg. Was für mich endgültig behoben wurde, war der Export der folgenden Umgebungsvariablen:

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

Wahrscheinlich wird das helfen. Ich verwende Ubuntu 18.04 und als ich Krita mit der ppa-Methode installierte. Ich habe diesen Fehler erhalten:

Diese Anwendung konnte nicht gestartet werden, da das Qt-Plattform-Plugin "xcb" in "" nicht gefunden oder geladen werden konnte.

Verfügbare Plattform-Plugins sind: linuxfb, minimal, minimalgl, offscreen, wayland-egl, wayland, xcb.

Eine Neuinstallation der Anwendung könnte das Problem lösen. Abgebrochen

Ich habe alle Lösungen ausprobiert, die ich in diesem Thread und anderen Webs gefunden habe, ohne Erfolg.

Schließlich habe ich einen Beitrag gefunden, in dem der Autor erwähnt, dass es möglich ist, das Debuggen von qt5 mit diesem einfachen Befehl zu aktivieren:

export QT_DEBUG_PLUGINS=1

Nach dem Hinzufügen dieses Befehls führe ich erneut aus krita Ich habe die gleiche Fehlermeldung erhalten, obwohl ich jetzt die Ursache kenne.

libxcb-xinerama.so.0: Freigegebene Objektdatei kann nicht geöffnet werden: Keine solche Datei oder Verzeichnis.

Dieser Fehler verhindert, dass die "xcb" richtig geladen wird. Die Lösung wird also die Installation von `libxcb-xinerama.so.0" sein. Wenn ich jedoch den Befehl ausführen:

Sudo apt install libxcb-xinerama

Ich die lib wurde installiert. Also habe ich einen alten Trick benutzt, ja --reinstall

Sudo apt install --reinstall libxcb-xinerama

Dieser letzte Befehl hat mein Problem gelöst.

2
Teocci

In meinem Fall musste ich zwei Qt-Apps auf einem Ubuntu-Virtualbox-Gast bereitstellen. Eine war Befehlszeile ("app"), die andere GUI_based ("app_GUI").

Ich habe "ldd app" verwendet, um herauszufinden, welche Libs erforderlich sind, und kopierte sie in den Ubuntu-Gast. Während die ausführbare Befehlszeile "app" in Ordnung war, stürzte die GUI-basierte ausführbare Datei ab und gab .__ den Fehler "Fehler beim Laden des Plattform-Plugins" xcb ". Ich habe Ldd auf libxcb.so überprüft. aber auch dies hatte keine fehlenden Abhängigkeiten.

Das Problem schien zu sein, dass ich zwar alle richtigen Bibliotheken kopiert hatte, aber ich hatte versehentlich auch Bibliotheken kopiert, die bereits im Gastsystem vorhanden waren. Dies bedeutet, dass (a) sie nicht unbedingt kopiert werden mussten und (b) noch schlimmer waren Das Kopieren verursachte Inkompatibilitäten zwischen den Installationsbibliotheken. Schlimmer noch, sie wurden von Ldd nicht erkannt, 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 .

1
Giorgos Sfikas

Nach der Installation von Viber hatte ich dasselbe Problem. Es hatte alle erforderlichen qt-Bibliotheken in /opt/viber/plugins/. Ich überprüfte Abhängigkeiten von /opt/viber/plugins/platforms/libqxcb.so und fand fehlende Abhängigkeiten. Es waren libxcb-render.so.0, libxcb-image.so.0, libxcb-icccm.so.4, libxcb-xkb.so.1So. Ich habe mein Problem dadurch gelöst, dass fehlende Pakete mit diesen Bibliotheken installiert wurden:

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

1

Also verbrachte ich einen Tag damit, herauszufinden, was das Problem war. Ich habe alle vorgeschlagenen Lösungen ausprobiert, aber nichts davon funktionierte wie das Installieren von xcb libs oder das Exportieren des Qt-Plugins-Ordners. Die Lösung, die vorschlug, QT_DEBUG_PLUGINS=1 zum Debuggen des Problems zu verwenden, bot mir keine direkten Einblicke 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, andere Dateien von verschiedenen Qt-Installationen zu verwenden? Auf meinem Computer hatte ich eine Standardversion in /home/username/Qt/ und einige lokale Builds in meinem Projekt, die ich selbst kompiliert habe (ich habe andere benutzerdefinierte Kits auch an anderen Standorten). Wann immer ich versuchte, eines der Kits zu verwenden (vom Qt-Wartungswerkzeug installiert oder von mir selbst gebaut), erhielt ich einen "xcb-Fehler".

Die Lösung war einfach: Geben Sie den Qt-Pfad durch CMAKE_PREFIX_PATH und nicht wie Qt5_DIR an, und das Problem wurde dadurch gelöst. Beispiel:

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

1
vicrucann

Ich hatte dieses Problem und entfernte kurz darauf die Qt Configs aus meiner Umgebung. Das heißt,

rm -rf ~/.config/Qt*

Dann habe ich qtcreator gestartet und es hat sich mit dem vorhandenen Zustand der Maschine neu konfiguriert. Es erinnerte sich nicht mehr daran, wo meine Projekte waren, aber das bedeutete nur, dass ich wieder "zum ersten Mal" nach ihnen suchen musste.

Noch wichtiger ist jedoch, dass sich selbst ein zusammenhängender Satz von Bibliothekspfaden aufgebaut hat, sodass ich meine ausführbaren Projektdateien erneut erstellen und ausführen kann, ohne dass die Bibliotheken xcb oder qxcb verloren gehen.

0
Blair Houghton

Ich verbinde alle Qt-Sachen statisch mit den generischen Linux-Builds meiner Open-Source-Projekte. Es macht das Leben ein bisschen einfacher. Sie müssen lediglich statische Versionen von Qt-Bibliotheken erstellen. Natürlich kann dies 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.

0
juzzlin

Ich mag die Lösung mit qt.conf .

Setzen Sie qt.conf in der Nähe der ausführbaren Datei mit den folgenden Zeilen:

[Paths]
Prefix = /path/to/qtbase

Und es funktioniert wie ein Zauber: ^)

0
kyb

Dieses Problem kann viele Ursachen haben. Der Schlüssel ist zu verwenden

export QT_DEBUG_PLUGINS=1

bevor Sie Ihre Qt-Anwendung ausführen. Überprüfen Sie dann die Ausgabe, die Sie auf die Fehlerrichtung verweist. In meinem Fall war es:

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

Das wird aber in verschiedenen Threads gelöst. Siehe zum Beispiel https://stackoverflow.com/a/50097275/2408964 .

0
untill