Napisałem aplikację na Linuksa, która używa Qt5.
Ale kiedy próbuję uruchomić go na Linuksie bez zainstalowanego Qt SDK, wynik w konsoli to:
Nie udało się załadować wtyczki platformy „xcb”. Dostępne platformy to:
Jak mogę to naprawić? Może muszę skopiować jakiś plik wtyczki? Kiedy używam ubuntu z zainstalowanym Qt5, ale zmieniam nazwę katalogu Qt, pojawia się ten sam problem. Więc używa jakiegoś pliku z katalogu Qt ...
AKTUALIZACJA: kiedy tworzę w katalogu aplikacji folder „platformy” z plikiem libqxcb.so , aplikacja nadal się nie uruchamia, ale komunikat o błędzie zmienia się:
Nie udało się załadować wtyczki platformy „xcb”. Dostępne platformy to:
xcb
Jak to się stało? W jaki sposób wtyczka platformy może być dostępna, ale nie można jej załadować?
eveonline.sh
, nieeveonline
- program uruchamiający ma wszystkie biblioteki w pakiecie ze specjalnymi wersjami.Odpowiedzi:
Użyj ldd (man ldd), aby wyświetlić zależności bibliotek współdzielonych. Uruchomienie tego na libqxcb.so
pokazuje, że xcb zależy od libQt5DBus.so.5 oprócz libQt5Core.so.5 i libQt5Gui.so.5 (i wielu innych bibliotek systemowych). Dodaj libQt5DBus.so.5 do swojej kolekcji współdzielonych bibliotek i powinieneś być gotowy, aby przejść dalej.
źródło
sudo apt-get install libx11-xcb1
naprawiono problem. Ale twoja rekomendacja użycialdd
była tym, co wskazało mi właściwą bibliotekę do zainstalowania. Dzięki!ldd
, spróbuj znaleźćplugins/platforms
katalog w instalacji Qt. Spróbuj skopiować cały katalog w to samo miejsce, w którym znajduje się plik binarny lub udostępniony plik biblioteki. Jeśli to działa, można ustawićLD_LIBRARY_PATH
(hacky) lub, jak wspomniano w odpowiedzi przez @bossbarber,QT_QPA_PLATFORM_PLUGIN_PATH
.Jak napisano wcześniej, musisz upewnić się, że instalujesz wtyczki platformy podczas wdrażania aplikacji. W zależności od tego, jak chcesz wdrożyć rzeczy, istnieją dwie metody informowania aplikacji o miejscu, w którym wtyczki platformy (np. Platformy / wtyczki / libqxcb.so) znajdują się w czasie wykonywania, co może działać dla Ciebie.
Pierwszym jest wyeksportowanie ścieżki do katalogu za pomocą zmiennej QT_QPA_PLATFORM_PLUGIN_PATH.
lub
export QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins ./my_qt_app
Inną opcją, którą wolę, jest utworzenie pliku qt.conf w tym samym katalogu, co plik wykonywalny. Zawartość której będzie:
Więcej informacji na ten temat można znaleźć tutaj oraz przy korzystaniu z qt.conf
źródło
LD_LIBRARY_PATH
nie działa, aleQT_QPA_PLATFORM_PLUGIN_PATH
udało się. Super dzięki.Próbowałem uruchomić mój plik binarny, skompilowany z Qt
5.7
, na Ubuntu 16.04 LTS, na którym Qt5.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ępnieThis 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. Skopiujlibqxcb.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ścilibqxcb.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ądLD_LIBRARY_PATH=.
). Powtarzaj ten proces, aż wszystkie zależności zostaną spełnione.PS dzięki autorowi tej odpowiedzi za
QT_DEBUG_PLUGINS=1
.źródło
Ubuntu 16.04 64-bitowy. Mam problem najwyraźniej bez powodu. Poprzedniej nocy obejrzałem film na mojej instancji VideoLan, tego wieczoru chciałbym obejrzeć inny z VideoLan. VLC po prostu nie chciał działać z powodu błędu w pytaniu. Wyszukałem trochę w Google i znalazłem rozwiązanie, które rozwiązało mój problem: od teraz VLC działa tak jak wcześniej. Rozwiązaniem jest to polecenie:
sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/
Nie jestem w stanie wyjaśnić, jakie są jego konsekwencje, ale wiem, że tworzy to brakujące symboliczne łącze.
źródło
-f
--force
flagi, dopóki naprawdę nie wiesz, co robisz. Może to spowodować inne problemy.Wypróbowałem główne części każdej odpowiedzi, ale bez skutku. Ostatecznie naprawiłem to, wyeksportowałem następujące zmienne środowiskowe:
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/
źródło
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/
. Niestety naprawił tylko mój VLC, a nie Virtualbox, który ma ten sam błąd ...Od wersji 5 Qt używa systemu abstrakcji platformy (QPA) do abstrakcji z podstawowej platformy.
Implementację dla każdej platformy zapewniają wtyczki. W przypadku X11 jest to wtyczka XCB. Zobacz wymagania Qt dla X11, aby uzyskać więcej informacji na temat zależności.
źródło
Prawdopodobnie to pomoże. Używam Ubuntu 18.04 i kiedy zainstalowałem Krita przy użyciu metody ppa. Mam ten błąd:
Bez powodzenia wypróbowałem wszystkie rozwiązania, które znalazłem w tym wątku i na innych stronach.
Wreszcie znalazłem post, w którym autor wspomniał, że można aktywować debugowanie, o którym mowa w qt5 za pomocą tego prostego polecenia:
export QT_DEBUG_PLUGINS=1
Po dodaniu tego polecenia uruchamiam ponownie krita. Otrzymałem ten sam błąd, ale teraz znam przyczynę.
Ten błąd uniemożliwia prawidłowe załadowanie „xcb”. Zatem rozwiązaniem będzie zainstalowanie pliku `libxcb-xinerama.so.0", prawda? Jednak po uruchomieniu polecenia:
Biblioteka została zainstalowana. Więc użyłem starej sztuczki, tak
--reinstall
To ostatnie polecenie rozwiązało mój problem.
źródło
Ten problem może mieć wiele przyczyn. Kluczem jest użycie
export QT_DEBUG_PLUGINS=1
przed uruchomieniem aplikacji Qt. Następnie sprawdź dane wyjściowe, które wskażą kierunek błędu. W moim przypadku było to:
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))
Ale to jest rozwiązywane w różnych wątkach. Zobacz na przykład https://stackoverflow.com/a/50097275/2408964 .
źródło
Napotkałem bardzo podobny problem z tym samym komunikatem o błędzie. Najpierw debuguj niektóre, włączając drukarkę Qt Debug za pomocą polecenia wiersza poleceń:
i ponownie uruchom aplikację. Dla mnie to ujawniło następujące informacje:
„Nie można załadować biblioteki /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: nie można otworzyć pliku obiektu współdzielonego: Brak takiego pliku lub katalogu) ”
„Nie można załadować biblioteki /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: nie można otworzyć pliku obiektu współdzielonego: Brak takiego pliku lub katalogu) ”
Rzeczywiście, brakowało mi libxkbcommon-x11.so.0 i libxkbcommon-x11.so.0. Następnie sprawdź swoją architekturę używając dpkg z linii poleceń linux. (Dla mnie polecenie „arch” dało inny i nieprzydatny wynik)
Następnie wygooglowałem „libxkbcommon-x11.so.0 ubuntu 18.04 amd64”, a także libxkbcommon-x11.so.0, co daje te pakiety na packages.ubuntu.com. To mówi mi, z perspektywy czasu, co nie jest zaskakujące, brakuje mi pakietów nazwanych libxkbcommon-x11-0 i libxkbcommon0 i że instalacja tych pakietów będzie zawierała potrzebne pliki, ale wersje deweloperskie nie. Wtedy rozwiązanie:
źródło
Napotkałem ten sam problem po zainstalowaniu Vibera. Miał wszystkie wymagane biblioteki qt w
/opt/viber/plugins/
. Sprawdziłem zależności/opt/viber/plugins/platforms/libqxcb.so
i znalazłem brakujące zależności. Bylilibxcb-render.so.0
,libxcb-image.so.0
,libxcb-icccm.so.4
,libxcb-xkb.so.1
Więc mój problem rozwiązany poprzez zainstalowanie brakujących pakietów z tej biblioteki:apt-get install libxcb-xkb1 libxcb-icccm4 libxcb-image0 libxcb-render-util0
źródło
Spędziłem więc około dnia próbując dowiedzieć się, o co chodzi; wypróbowałem wszystkie proponowane rozwiązania, ale żadne z nich nie działało tak, jak instalowanie bibliotek xcb lub eksportowanie folderu wtyczek Qt. Rozwiązanie, które zasugerowało użycie
QT_DEBUG_PLUGINS=1
do debugowania problemu, nie zapewniło mi bezpośredniego wglądu, jak w odpowiedzi - zamiast tego otrzymywałem coś o nierozwiązanych symbolach w Qt5Core.To dało mi jednak wskazówkę: co zrobić, jeśli próbuje użyć różnych plików z różnych instalacji Qt? Na moim komputerze miałem zainstalowaną wersję standardową w
/home/username/Qt/
i kilka lokalnych kompilacji w ramach mojego projektu, które sam skompilowałem (mam również inne niestandardowe zestawy zbudowane w innych lokalizacjach). Za każdym razem, gdy próbowałem użyć któregokolwiek z zestawów (zainstalowanych przez narzędzie do konserwacji Qt lub zbudowanych przeze mnie), otrzymywałem „błąd xcb”.Rozwiązanie było proste: podaj ścieżkę Qt przez,
CMAKE_PREFIX_PATH
a nieQt5_DIR
tak, jak ja, i rozwiązało problem. Przykład:cmake .. -DCMAKE_PREFIX_PATH=/home/username/Qt/5.11.1/gcc_64
źródło
W moim przypadku musiałem wdrożyć dwie aplikacje Qt na gościu wirtualnej skrzynki Ubuntu. Jednym z nich był wiersz poleceń („aplikacja”), a drugim oparty na interfejsie GUI („app_GUI”).
Użyłem „aplikacji ldd”, aby dowiedzieć się, jakie są wymagane biblioteki, i skopiowałem je do gościa Ubuntu. Podczas gdy wykonywalna "aplikacja" wiersza poleceń działała poprawnie, plik wykonywalny oparty na GUI uległ awarii, powodując błąd "Nie udało się załadować wtyczki platformy" xcb ". Sprawdziłem ldd pod kątem libxcb.so, ale to również nie miało brakujących zależności.
Problem polegał na tym, że chociaż skopiowałem wszystkie właściwe biblioteki, przypadkowo skopiowałem również biblioteki, które były już obecne w systemie gościa .. co oznacza, że (a) nie trzeba było ich kopiować w pierwszej kolejności i (b) gorzej skopiowanie ich spowodowało niekompatybilność między bibliotekami instalacyjnymi. Co gorsza, były niewykrywalne przez ldd, jak powiedziałem.
Rozwiązanie? Upewnij się, że kopiujesz biblioteki pokazane jako brakujące przez ldd i absolutnie żadnych dodatkowych bibliotek .
źródło
W moim przypadku brakujące pliki nagłówkowe były powodem, dla
libxcb
którego Qt nie zbudował. Zainstalowanie ich zgodnie z https://wiki.qt.io/Building_Qt_5_from_Git#Linux.2FX11 rozwiązało problem:źródło
Podoba mi się rozwiązanie z
qt.conf
.Zbliż
qt.conf
się do pliku wykonywalnego następnymi liniami:I działa jak urok: ^)
Przykład roboczy:
[Paths] Prefix = /home/user/SDKS/Qt/5.6.2/5.6/gcc_64/
Dokumentacja na ten temat znajduje się tutaj: https://doc.qt.io/qt-5/qt-conf.html
źródło
cd path/to/executable; vim qt.conf
, wklej. Zapisz i wyjdź.Łączę wszystkie elementy Qt statycznie z ogólnymi wersjami Linuksa moich projektów open source. To trochę ułatwia życie. Musisz tylko najpierw zbudować statyczne wersje bibliotek Qt. Oczywiście nie można tego zastosować do oprogramowania zamkniętego z powodu problemów licencyjnych. Wdrażanie aplikacji Qt5 w systemie Linux jest obecnie nieco problematyczne, ponieważ na przykład Ubuntu 12.04 nie ma bibliotek Qt5 w repozytoriach pakietów.
źródło
Miałem ten problem i miałem przeczucie, że usunąłem konfiguracje Qt z mojego środowiska. To znaczy,
Następnie uruchomiłem qtcreator, który zrekonfigurował się z istniejącym stanem maszyny. Nie pamiętał już, gdzie są moje projekty, ale oznaczało to po prostu, że musiałem ponownie przeglądać je „po raz pierwszy”.
Ale co ważniejsze, zbudował sobie spójny zestaw ścieżek do bibliotek, więc mogłem ponownie zbudować i uruchomić pliki wykonywalne projektu bez zaginięcia bibliotek xcb lub qxcb.
źródło
sudo ln -sf /usr/lib/...."adapt-it"..../qt5/plugins/platforms/ / usr / bin /
Tworzy symboliczne łącze, które zostało pominięte. Dobre dla QT! Dobre dla VLC !!
źródło