GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Fehler beim Laden des Plattform-Plug-ins xcb beim Starten der qt5-App unter Linux, ohne dass qt installiert ist

Verwenden Sie ldd (man ldd), um Abhängigkeiten von gemeinsam genutzten Bibliotheken anzuzeigen. Führen Sie dies auf libqxcb.so

aus
.../platforms$ ldd libqxcb.so

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 gemeinsam genutzter Bibliotheken hinzu und Sie sollten bereit sein, weiterzumachen.


Wie bereits früher gepostet, müssen Sie sicherstellen, dass Sie die Plattform-Plug-ins installieren, wenn Sie Ihre Anwendung bereitstellen. Abhängig davon, wie Sie Dinge bereitstellen möchten, gibt es zwei Methoden, um Ihrer Anwendung mitzuteilen, wo sich die Plattform-Plugins (z. B. platform/plugins/libqxcb.so) zur Laufzeit befinden, die für Sie funktionieren könnten.

Die erste besteht darin, den Pfad zum Verzeichnis über die Variable QT_QPA_PLATFORM_PLUGIN_PATH 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 bevorzuge, besteht darin, eine qt.conf-Datei im selben Verzeichnis wie Ihre ausführbare Datei zu erstellen. Der Inhalt davon wäre:

[Paths]
Plugins=/path/to/plugins

Weitere Informationen hierzu finden Sie hier und unter Verwendung von qt.conf


Ich habe versucht, meine mit Qt 5.7 kompilierte Binärdatei zu starten , auf Ubuntu 16.04 LTS wobei Qt 5.5 ist vorinstalliert. Es hat nicht funktioniert.

Zuerst habe ich die Binärdatei selbst mit ldd inspiziert wie hier vorgeschlagen wurde, und alle "nicht gefundenen" Abhängigkeiten "erfüllt". Dann diese berüchtigte This application failed to start because it could not find or load the Qt platform plugin "xcb" Fehler wurde ausgegeben.

So lösen Sie dies unter Linux

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

Dann möchten Sie vielleicht Ihre Binärdatei mit QT_DEBUG_PLUGINS=1 ausführen Umgebungsvariable gesetzt, um zu prüfen, welche Abhängigkeiten von libqxcb.so bestehen sind nicht „zufrieden“. (Sie können auch ldd verwenden dafür wie in der akzeptierten Antwort vorgeschlagen).

Die Befehlsausgabe kann wie folgt 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 das fehlgeschlagene 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 dieser Antwort für QT_DEBUG_PLUGINS=1 .


Linux
  1. So fügen Sie einen Drucker in Linux Mint 12 hinzu | Drucker in Linux Mint hinzufügen

  2. So öffnen Sie Appimage unter Linux

  3. Linux – Was würde passieren, wenn eine Festplatte ausfällt, während der Linux-Kernel läuft?

  4. OpenGL ohne X.org unter Linux

  5. Benötigen Sie eine kleine Distribution ohne Desktop- oder Windows-Manager, nur um eine einzelne grafische App auszuführen

Geschichte des Linux-Kernel-Live-Patchings

So listen Sie installierte Pakete in Linux auf

11 Linux-Befehle, ohne die ich nicht leben kann

Linux-VPN-Plug-in-Fehler – Was nun?

Linux oder Windows:25 Dinge, die Sie bei der Auswahl der besten Plattform wissen sollten

Was ist Load Average in Linux?