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
.