Próbowałem uruchomić mój plik binarny, skompilowany z Qt 5.7
, na Ubuntu 16.04 LTS, na którym Qt 5.5
jest preinstalowany. To nie zadziałało.
Najpierw przejrzałem sam plik binarny, ldd
tak jak tu zasugerowano, i „spełniłem” wszystkie „nie znalezione” zależności. Następnie This application failed to start because it could not find or load the Qt platform plugin "xcb"
rzucono ten notoryczny błąd.
Jak rozwiązać ten problem w systemie Linux
Po pierwsze, powinieneś stworzyć platforms
katalog, w którym znajduje się twój plik binarny, ponieważ jest to miejsce, w którym Qt szuka biblioteki XCB. Skopiuj libqxcb.so
tam. Zastanawiam się, dlaczego autorzy innych odpowiedzi o tym nie wspomnieli.
Następnie możesz chcieć uruchomić swój plik binarny z QT_DEBUG_PLUGINS=1
ustawioną zmienną środowiskową, aby sprawdzić, które zależności libqxcb.so
nie są „spełnione”. (Możesz również użyć ldd
do tego, jak zasugerowano w zaakceptowanej odpowiedzi).
Wynik polecenia może wyglądać następująco:
me@xerus:/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)
Zwróć uwagę na wadliwą libQt5DBus.so.5
bibliotekę. Skopiuj go do ścieżki bibliotek, w moim przypadku był to ten sam katalog, w którym znajduje się mój plik binarny (stąd LD_LIBRARY_PATH=.
). Powtarzaj ten proces, aż wszystkie zależności zostaną spełnione.
PS dzięki autorowi tej odpowiedzi za QT_DEBUG_PLUGINS=1
.