„Nie udało się załadować wtyczki platformy” xcb „” podczas uruchamiania aplikacji qt5 na Linuksie bez zainstalowanego qt

22

Napisałem aplikację dla systemu Linux, która korzysta z Qt5.

Ale kiedy próbuję uruchomić go na systemie Linux bez zainstalowanego pakietu Qt SDK, dane wyjściowe w konsoli są następujące:

Failed to load platform plugin "xcb". Available platforms are:

Jak mogę to naprawić? Może muszę skopiować plik wtyczki? Gdy używam Ubuntu z zainstalowanym Qt5, ale zmieniam nazwę katalogu Qt, pojawia się ten sam problem. Używa więc pliku z katalogu qt ...

Znalazłem plik libqxcb.sow katalogu Qt SDK, ale umieszczenie go /usr/libnie pomaga.

lokomocja
źródło

Odpowiedzi:

12

Prawidłowym rozwiązaniem jest uruchomienie następującej komendy na terminalu:

sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/

Tworzy symboliczne łącze, którego brakuje.

Francesco
źródło
1
To rozwiązało problem dla mnie.
Pratik Singhal
3
Dlaczego połączyć pliki w plugins/platformscelu /usr/bin? platformsKatalog zawiera biblioteki współdzielone, /usr/binsłuży do plików binarnych. Czy zawartość nie powinna platformsiść /usr/lib?
Nathan F.
@NathanF. przynajmniej dla mojej instalacji moduł ładujący Qt szuka platform w /usr/bin/platforms(nie wiem dlaczego). Ta odpowiedź zadziałała również dla mnie: stackoverflow.com/a/25437758/2249798
m13r
12

Wszystkim przyszłym czytelnikom, którzy zetkną się z tym - zanim zaczniesz (niebezpiecznie) bawić się dowiązaniami symbolicznymi do bibliotek współdzielonych, zdecydowanie sugeruję uruchomienie

export QT_DEBUG_PLUGINS=1

a następnie uruchom ponownie swój uszkodzony plik wykonywalny w terminalu. Przeczytaj rzeczywisty komunikat o błędzie wyrzucony przez QT, ponieważ żadne z powyższych rozwiązań nie rozwiązało przyczyny tego błędu w moim przypadku.

Mój wynik po włączeniu QT_DEBUG_PLUGINSto:

QFactoryLoader::QFactoryLoader() checking directory path "/opt/PostgreSQL/9.6/pgAdmin 4/bin/platforms" ...
loaded library "/opt/PostgreSQL/9.6/pgAdmin 4/plugins/platforms/libqxcb.so"
QLibraryPrivate::loadPlugin failed on "/opt/PostgreSQL/9.6/pgAdmin 4/plugins/platforms/libqxcb.so" : "Cannot load library /opt/PostgreSQL/9.6/pgAdmin 4/plugins/platforms/libqxcb.so: (/opt/PostgreSQL/9.6/lib/libz.so.1: version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16))"
This application failed to start because it could not find or load the Qt platform plugin "xcb".

Available platform plugins are: xcb.

Reinstalling the application may fix this problem.
Aborted (core dumped)

więc następnie googled version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16))błąd i znaleźć rozwiązanie, które , co rozwiązało problem.

SlugFrisco
źródło
2
Nie jestem pewien, kto cię przegłosował. To dało mi ślady potrzebne do znalezienia faktycznego błędu związanego z moją konkretną sytuacją (w moim przypadku brakowało libc ++. Musiałem go zainstalować z libc ++ - dev ". Dziękujemy za opublikowanie tego.
HBSKan
11

Miałem ten komunikat o błędzie podczas próby uruchomienia „Stellarium”.

Dzięki strace odkryłem, że brakowało pliku libxcb-xinerama.so.0. Musiałem ponownie zainstalować, libxcb-xinerama0aby działało:

sudo apt-get install --reinstall libxcb-xinerama0
wmeyer
źródło
Wow, jaki bałagan z polowania to próbowało różnych instalacji. Bardzo za to wdzięczny.
Hendy,
To pomogło !!! dzięki
trsvchn
6

Spróbuj zainstalować libqt5x11extras5pakiet za pomocą polecenia:
sudo apt-get install libqt5x11extras5

Nazwa może być inna. Możesz to rozwiązać, wyszukując:
sudo apt-cache search qt5 | grep 'X11 extras'

a jako wynik otrzymasz nazwę pakietu:

libqt5x11extras5 - Dodatki Qt 5 X11

Bonus_05
źródło
2

W moim typie ubuntu:

sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/platforms

Może pracować

李智坚
źródło
1
Jak na razie nie jest to dobra odpowiedź. Edytuj, aby wyjaśnić, co dokładnie robi to polecenie.
You'reAGitForNotUsingGit
Nie działało dla mnie
Ratbert
2

Dla tych, którzy nadal tkwią po wypróbowaniu każdej innej opcji w Internecie, możesz przyjrzeć się dokładnej ścieżce, z której ten notoryczny libqxcb.so jest przeszukiwany, w celu otwarcia / załadowania przez Qtaplikację ( w moim przypadku VirtualBox-5.2.8jest to Qtaplikacja), używając narzędzie strace . W moim przypadku, ponieważ budowałem VirtualBox-5.2.8z jego źródła, szukałem libqxcb.sow poniższej lokalizacji:
"...VirtualBox-5.2.8/out/linux.amd64/release/bin/platforms/" a nie w defaultścieżkach biblioteki, Qtścieżce instalacji itp. Tak więc żadne lddsprawdzenie i inne rozwiązania nie zadziałały. A także ustawienie QT_DEBUG_PLUGINS=1nie wygenerowało żadnych dodatkowych dzienników.

Uruchamianie strace na pliku binarnym VirtualBox, który zbudowałem przy użyciu Clang / LLVM na Ubuntu 17.10 x86_64:

...VirtualBox-5.2.8$ strace ./out/linux.amd64/release/bin/VirtualBox

.
.
.
access(".../VirtualBox-5.2.8/out/linux.amd64/release/bin/platforms/.", F_OK) = -1 ENOENT (No such file or directory)
write(2, "Qt FATAL: ", 10Qt FATAL: )              = 10
write(2, "This application failed to start"..., 154This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".

Reinstalling the application may fix this problem.) = 154
.
.
.

To był mój hitting-the-nail-on-its-headmoment i stworzyłem symlinkz katalogu zainstalowanego Qt5.10.1, platformswymienionego poniżej: "...Qt5.10.1/Tools/QtCreator/lib/Qt/plugins/platforms/"na przeszukiwaną ścieżkę "...VirtualBox-5.2.8/out/linux.amd64/release/bin/". Tak więc, VirtualBox-5.2.8zbudowany ze źródła na Linux ( Ubuntu 17.10 x86_64) przy użyciu Clang/LLVM, wreszcie został pomyślnie uruchomiony !

W rzeczywistości, kolejny ciekawy rzeczą jest to, że ja zbudowałem VirtualBox-5.2.8całkowicie używając Clang/Clang++/LLVMna Ubuntu 17.10 x86_64po znacznym wysiłku - dla FreeBSD, istnieje już port na budowę VirtualBoxużywając clangale dla systemu Linux, jest silnie uzależniona od GCCjak widziałem i dlatego zajęło dużo wysiłku, aby uzyskać do tego momentu, aby móc z powodzeniem budować VirtualBox-5.2.8z jego źródła przy użyciu Clang/Clang++/LLVMon Ubuntu 17.10 x86_64for target Linux/AMD64( Ubuntu 17.10 x86_64) i pomyślnie uruchamiać go po rozwiązaniu innych problemów wraz z tym notorycznym libqxcb.so.

Twoje zdrowie.


źródło
1

W ten sposób rozwiązuje kilka problemów, gdy uruchamiam emulator na Ubuntu 18.04.

$ vim ~ / .bashrc

Dodaj następujące wiersze na końcu pliku. Instaluję mój zestaw SDK systemu Android na/opt/Android/Sdk

export ANDROID_HOME=/opt/Android/Sdk
export ANDROID_SDK_ROOT=/opt/Android/Sdk
export ANDROID_AVD_HOME=/home/<your name>/.android/avd
export LD_LIBRARY_PATH="/opt/Android/Sdk/emulator/lib64:$LD_LIBRARY_PATH"
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins
MZeng
źródło
1

Uruchomienie tego rozwiązało mi to:

sudo apt-get --reinstall install libqt5dbus5 \
libqt5widgets5 libqt5network5 libqt5gui5 libqt5core5a \
libdouble-conversion1 libxcb-xinerama0
FerranB
źródło
0

Wygląda na to, że kryje się za tym wiele różnych rzeczy. W moim przypadku (Debian 9.7) QT_DEBUG_PLUGINS = 1 pomógł nam odnaleźć brakujące biblioteki i

$ sudo apt-get install libxcb-render-util0 libxcb-image0 libxcb-keysyms1 libxcb-icccm4

Rozwiązać problem.

Antos
źródło
-3

Skopiuj plugins/platforms/libqxcb.soz qtinstalacji do platforms/libqxcb.sokatalogu aplikacji.

Adam
źródło