"Impossibile caricare il plug-in della piattaforma" xcb "" durante l'avvio dell'app qt5 su Linux senza qt installato


101

Ho scritto un'applicazione per Linux che utilizza Qt5.

Ma quando provo ad avviarlo su Linux senza Qt SDK installato, l'output nella console è:

Impossibile caricare il plug-in della piattaforma "xcb". Le piattaforme disponibili sono:

Come posso risolvere questo problema? Potrebbe essere necessario copiare qualche file di plugin? Quando uso ubuntu con Qt5 installato, ma rinomino la directory Qt, si verifica lo stesso problema. Quindi, utilizza alcuni file dalla directory Qt ...

AGGIORNAMENTO: quando creo nella directory dell'app la cartella "piattaforme" con il file libqxcb.so , l'app ancora non si avvia, ma il messaggio di errore cambia:

Impossibile caricare il plug-in della piattaforma "xcb". Le piattaforme disponibili sono:

xcb

Come può succedere? In che modo il plug-in della piattaforma può essere disponibile ma non può essere caricato?


1
Giusto per chiarire, le librerie Qt sono effettivamente installate?
cmannett85

1
Se la libreria Qt è installata, il programma funziona normalmente. Se non è installato o se la directory qt sdk non viene trovata, il programma non funziona.
locomozione

Assicurati di copiare anche libQt5Gui.so.5
edaniels

1
Per coloro che vengono qui dal programma di avvio di Eve Online: Usa eveonline.sh, no eveonline: il programma di avvio ha tutte le librerie in bundle con versioni speciali.
Ondra Žižka

Risposte:


59

Usa ldd (man ldd) per mostrare le dipendenze della libreria condivisa. Eseguendolo su libqxcb.so

.../platforms$ ldd libqxcb.so

mostra che xcb dipende da libQt5DBus.so.5 oltre a libQt5Core.so.5 e libQt5Gui.so.5 (e molte altre librerie di sistema). Aggiungi libQt5DBus.so.5 alla tua raccolta di librerie condivise e dovresti essere pronto per andare avanti.


1
Grazie! Questo è esattamente il problema. libQt5DBus.so.5 dovrebbe essere elencato nella documentazione insieme a core e gui.
dzlatkov

4
Nel mio caso ha sudo apt-get install libx11-xcb1risolto il problema. Ma la tua raccomandazione di utilizzo è lddstata ciò che mi ha indirizzato alla libreria corretta da installare. Grazie!
Daniel

4
Nel mio caso ho anche dovuto aggiungere libQt5XcbQpa.so.5 alla cartella lib.
elsamuko

4
Se il problema persiste anche dopo aver eseguito l'operazione ldd, prova a trovare la plugins/platformsdirectory all'interno della tua installazione di Qt. Prova a copiare l'intera directory nella stessa posizione del file binario o della libreria condivisa. Se funziona, è possibile impostare LD_LIBRARY_PATH(hacky) o, come accennato nella risposta da @bossbarber, QT_QPA_PLATFORM_PLUGIN_PATH.
csl

1
Nel mio caso non ho creato la directory / usr / bin / piattaforme. Risolto con: sudo ln -sf / usr / lib / x86_64-linux-gnu / qt5 / plugins / platform / / usr / bin /
gipsh

55

Come è stato pubblicato in precedenza, è necessario assicurarsi di installare i plug-in della piattaforma quando si distribuisce l'applicazione. A seconda di come vuoi distribuire le cose, ci sono due metodi per dire alla tua applicazione dove i plugin della piattaforma (es. Piattaforme / plugins / libqxcb.so) sono in runtime che potrebbero funzionare per te.

Il primo è esportare il percorso nella directory tramite la variabile QT_QPA_PLATFORM_PLUGIN_PATH.

QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins ./my_qt_app

o

export QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins
./my_qt_app

L'altra opzione, che preferisco, è creare un file qt.conf nella stessa directory del tuo eseguibile. Il cui contenuto sarebbe:

[Paths]
Plugins=/path/to/plugins

Maggiori informazioni su questo possono essere trovate qui e in using qt.conf


1
Wow! Grazie mille! Non sapevo di qt.conf, dovrebbe essere sulla prima pagina delle FAQ sulla distribuzione

nel mio caso per qualche motivo il percorso all'interno di qt.conf (Plugins = plugins) non è stato riconosciuto. Ho finito per fornire un file qt.conf vuoto, che consente di sovrascrivere i percorsi globali (hard coded) con i qt.conf-defaults, nel mio caso la sottocartella plugins nella directory app.
B Piltz

1
Ci stavamo chiedendo perché LD_LIBRARY_PATHnon funzionasse, ma QT_QPA_PLATFORM_PLUGIN_PATHha funzionato. Grazie mille.
Ahmed Fasih

1
2a o 3a volta arrivo a questa risposta e aiuta ogni volta.
kyb

26

Ho provato ad avviare il mio binario, compilato con Qt 5.7, su Ubuntu 16.04 LTS dove Qt 5.5è preinstallato. Non ha funzionato.

All'inizio, ho ispezionato il file binario stesso con lddcome suggerito qui e "soddisfatto" tutte le dipendenze "non trovate". Quindi questo famigerato This application failed to start because it could not find or load the Qt platform plugin "xcb"errore è stato lanciato.

Come risolverlo in Linux

Innanzitutto dovresti creare la platformsdirectory in cui si trova il tuo binario, perché è il posto in cui Qt cerca la libreria XCB. Copia libqxcb.solì. Mi chiedo perché gli autori di altre risposte non ne abbiano parlato.

Quindi potresti voler eseguire il tuo binario con QT_DEBUG_PLUGINS=1la variabile d'ambiente impostata per controllare quali dipendenzelibqxcb.so non sono "soddisfatte". (Puoi anche usare lddper questo come suggerito nella risposta accettata).

L'output del comando potrebbe essere simile a questo:

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)

Nota la libQt5DBus.so.5libreria in errore . Copialo nel percorso delle tue librerie, nel mio caso era la stessa directory in cui si trova il mio binario (quindiLD_LIBRARY_PATH=. ). Ripetere questo processo fino a quando tutte le dipendenze sono soddisfatte.

PS grazie all'autore di questa risposta per QT_DEBUG_PLUGINS=1.


1
Ho scoperto che mentre c'erano dipendenze non specificate su libQt5xcbQpa.so.5 e libQtDBus.so.5 avevo ancora bisogno di aggiungere la cartella delle piattaforme come indicato. QUELLA combinazione lo ha fatto funzionare.
BSD

Qualcuno può indicarmi la spiegazione "For Dummies" di come correggere questo errore? Non ho idea di cosa significhi tutto questo, ho bisogno di istruzioni passo passo su come risolverlo in Linux.
John Smith,

@JohnSmith è meglio se ci dici cosa esattamente non ha senso per te. Quindi proveremo ad elaborare.
Neurotrasmettitore

11

Ubuntu 16.04 64 bit. Ho avuto il problema apparentemente senza motivo. La sera prima di guardare un film sulla mia istanza VideoLan, quella sera vorrei guardarne un altro con VideoLan. VLC semplicemente non voleva essere eseguito a causa dell'errore nella domanda. Ho cercato un po 'su google e ho trovato la soluzione che ha risolto il mio problema: da ora in poi VLC è eseguibile proprio come prima. La soluzione è questo comando:

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

Non sono in grado di spiegare quali sono le sue conseguenze, ma so che crea qualche collegamento simbolico mancante.


2
Non usare -f --forceflag finché non sai veramente cosa stai facendo. Ciò potrebbe causare altri problemi.
kyb

Questo è stato ciò che mi ha risolto con Ubuntu 18.04 (l'applicazione che ha il problema è Rescue Time.) Lascia il flag -f nel caso in cui tu abbia già una directory lì.
Eloff

10

Ho provato le parti principali di ogni risposta, senza alcun risultato. Quello che alla fine lo ha risolto per me è stato esportare le seguenti variabili di ambiente:

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/ 

Questo ha funzionato per me su Ubuntu 17.10 (ma ho questo problema dalla 16.04!) export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/. Sfortunatamente ha risolto solo il mio VLC, non Virtualbox che ha lo stesso errore ...
Tails

Ha funzionato in Ubuntu 18.04 per ottenere texworks 0.6.2 attivo e funzionante.
XavierStuvw

8

Dalla versione 5, Qt utilizza un sistema di astrazione della piattaforma (QPA) per astrarre dalla piattaforma sottostante.

L'implementazione per ogni piattaforma è fornita da plugin. Per X11 è il plugin XCB. Vedere Qt per i requisiti X11 per ulteriori informazioni sulle dipendenze.


Quindi, devo solo installare tutti i pacchetti dall'elenco delle dipendenze? E questo funzionerà? Inoltre ho trovato il file libqxcb.so nella directory QT SDK, ma posizionarlo nella directory usr / lib non ha risolto il mio problema.
locomozione

La pagina Deploying an Application on X11 Platforms dovrebbe contenere tutte le informazioni necessarie.
chiusura

Ho installato tutti i pacchetti menzionati in quella pagina, ma non ha aiutato. Ho trovato l'informazione, che i plugin della piattaforma devono essere nella directory dell'eseguibile nella cartella "piattaforme". Ho inserito il plugin xcb, ora l'erroe è cambiato: "Impossibile caricare il plugin della piattaforma" xcb ". Le piattaforme disponibili sono: xcb"
locomotion

1
@cloose È di nuovo morto :(
user89

@ user89 non fa per me. problema temporaneo forse?
chiusura il

6

Probabilmente questo aiuterà. Sto usando Ubuntu 18.04 e quando ho installato Krita usando il metodo ppa. Ho ricevuto questo errore:

Quest'applicazione non è riuscita ad avviarsi perché non è stato possibile trovare o caricare il plugin della piattaforma Qt "xcb" in "".

I plugin della piattaforma disponibili sono: linuxfb, minimal, minimalegl, offscreen, wayland-egl, wayland, xcb.

Reinstallare l'applicazone potrebbe risolvere questo problema. Abortito

Ho provato tutte le soluzioni che ho trovato in questo thread e in altri siti Web senza successo.

Infine, ho trovato un post in cui l'autore menziona che è possibile attivare il debugging detto di qt5 usando questo semplice comando:

export QT_DEBUG_PLUGINS=1

Dopo aver aggiunto questo comando eseguo di nuovo krita ho ricevuto lo stesso errore come mai ora conosco la causa.

libxcb-xinerama.so.0: impossibile aprire il file oggetto condiviso: nessun file o directory di questo tipo.

Questo errore impedisce al "xcb" di caricarsi correttamente. Quindi la soluzione sarà installare "libxcb-xinerama.so.0" giusto? Tuttavia, quando eseguo il comando:

sudo apt install libxcb-xinerama

Ho installato la libreria. Quindi ho usato un vecchio trucco, sì--reinstall

sudo apt install --reinstall libxcb-xinerama

Quest'ultimo comando ha risolto il mio problema.


6

Le cause di questo problema potrebbero essere molte. La chiave è usare

export QT_DEBUG_PLUGINS=1

prima di eseguire l'applicazione Qt. Quindi, ispeziona l'output, che ti indicherà la direzione dell'errore. Nel mio caso è stato:

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))

Ma questo è risolto in diversi thread. Vedi ad esempio https://stackoverflow.com/a/50097275/2408964 .


: facepalm: OMG, questo stesso consiglio ANCORA. No, questo non fornisce alcuna informazione utile, solo una versione molto più dettagliata dello stesso esatto errore. Nessun suggerimento o indizio per qualcos'altro da guardare. Niente che manca, niente "impossibile caricare" che già non sapessi.
John Smith,

2

Ho affrontato lo stesso problema dopo aver installato Viber. Aveva tutte le librerie qt richieste in formato /opt/viber/plugins/. Ho controllato le dipendenze di /opt/viber/plugins/platforms/libqxcb.soe ho trovato le dipendenze mancanti. Erano libxcb-render.so.0, libxcb-image.so.0, libxcb-icccm.so.4, libxcb-xkb.so.1 così ho risolto il mio problema con l'installazione di pacchetti mancanti con questo biblioteche:

apt-get install libxcb-xkb1 libxcb-icccm4 libxcb-image0 libxcb-render-util0


Ho avuto problemi ad avviare Tizen Emulator. Questo ha aiutato. Grazie.
AlexM

2

Quindi, ho passato circa una giornata cercando di capire quale fosse il problema; ho provato tutte le soluzioni proposte, ma nessuna di queste ha funzionato come l'installazione di xcb libs o l'esportazione della cartella dei plugin Qt. La soluzione che ha suggerito di utilizzareQT_DEBUG_PLUGINS=1 per eseguire il debug del problema non mi ha fornito una visione diretta come nella risposta, ma stavo ottenendo qualcosa sui simboli non risolti all'interno di Qt5Core.

Questo mi ha dato un suggerimento, però: cosa succede se sta provando a utilizzare file diversi da diverse installazioni Qt? Sulla mia macchina avevo installato la versione standard/home/username/Qt/ e alcune build locali all'interno del mio progetto che ho compilato da solo (ho anche altri kit personalizzati in altre posizioni). Ogni volta che ho provato a utilizzare uno qualsiasi dei kit (installato dallo strumento di manutenzione Qt o costruito da me stesso), ricevevo un "errore xcb".

La soluzione era semplice: fornire il percorso Qt attraverso CMAKE_PREFIX_PATHe non Qt5_DIRcome ho fatto io, e ha risolto il problema. Esempio:

cmake .. -DCMAKE_PREFIX_PATH=/home/username/Qt/5.11.1/gcc_64


Oh, amico, cosa c'è nel mondo Linux, dove ogni singola soluzione sul web fornisce errori imprevisti invece di funzionare? Mai? Tre giorni ora di tentativi di ottenere un desktop funzionante su un'installazione stock di Ubuntu. No, per chi viene qui da Google: questa soluzione non funziona meglio di qualsiasi altra cosa in questa pagina. Comincio a pensare che Linux in realtà non funzioni affatto.
John Smith,

2

Ho riscontrato un problema molto simile con lo stesso messaggio di errore. Innanzitutto, esegui il debug di alcuni accendendo la stampante Qt Debug con il comando della riga di comando:

esporta QT_DEBUG_PLUGINS = 1

e riesegui l'applicazione. Per me questo ha rivelato quanto segue:

"Impossibile caricare la libreria /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: impossibile aprire il file oggetto condiviso: Nessun file o directory con questo nome)"

"Impossibile caricare la libreria /home/.../miniconda3/lib/python3.7/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: impossibile aprire il file oggetto condiviso: Nessun file o directory con questo nome)"

In effetti, mi mancavano libxkbcommon-x11.so.0 e libxkbcommon-x11.so.0. Quindi, controlla la tua architettura usando dpkg dalla riga di comando di Linux. (Per me, il comando "arch" ha dato un risultato diverso e inutile)

dpkg --print-architecture #result per me: amd64

Ho quindi cercato su Google "libxkbcommon-x11.so.0 ubuntu 18.04 amd64", e lo stesso vale per libxkbcommon-x11.so.0, che fornisce quei pacchetti su packages.ubuntu.com. Questo mi ha detto, in retrospettiva non sorprende, che mi mancano pacchetti chiamati libxkbcommon-x11-0 e libxkbcommon0, e che l'installazione di quei pacchetti includerà i file necessari, ma le versioni dev no. Quindi la soluzione:

sudo apt-get update

sudo apt-get install libxkbcommon0

sudo apt-get install libxkbcommon-x11-0


1

Nel mio caso, avevo bisogno di distribuire due app Qt su un guest virtualbox di Ubuntu. Uno era a riga di comando ("app"), l'altro basato su GUI ("app_GUI").

Ho usato "ldd app" per scoprire quali sono le librerie richieste, e le ho copiate nel guest Ubuntu. Mentre l '"app" eseguibile dalla riga di comando funzionava correttamente, l'eseguibile basato sulla GUI si bloccava, dando l'errore "Impossibile caricare il plugin della piattaforma" xcb " Ho controllato ldd per libxcb.so, ma anche questo non aveva dipendenze mancanti.

Il problema sembrava essere che mentre copiavo tutte le librerie giuste, accidentalmente avevo copiato anche le librerie che erano già presenti nel sistema guest .. il che significa che (a) non erano necessarie per copiarle in primo luogo e (b) peggio , copiandoli produceva incompatibilità tra le librerie di installazione. Peggio ancora, non erano rilevabili da LDD come ho detto ..

La soluzione? Assicurati di copiare le librerie mostrate come mancanti da ldd e assolutamente nessuna libreria aggiuntiva .


E risolvo il mio problema usando questo consiglio, come?
John Smith,

1

Nel mio caso i file di intestazione mancanti erano il motivo per cui libxcbnon è stato creato da Qt. Installandoli secondo https://wiki.qt.io/Building_Qt_5_from_Git#Linux.2FX11 ha risolto il problema:

yum install libxcb libxcb-devel xcb-util xcb-util-devel mesa-libGL-devel libxkbcommon-devel

1
Sì, penso di aver avuto un problema simile. Anche qt compilato dai sorgenti ma non ho notato che xcb-toolchain non era sano sul mio sistema, quindi le parti qt-xcb non sono state installate.
Shevy

1

Mi piace la soluzione con qt.conf.

Metti qt.confvicino all'eseguibile con le righe successive:

[Paths]
Prefix = /path/to/qtbase

E funziona come un incantesimo: ^)

Per un esempio funzionante:

[Paths]
Prefix = /home/user/SDKS/Qt/5.6.2/5.6/gcc_64/

La documentazione su questo è qui: https://doc.qt.io/qt-5/qt-conf.html


E ho "messo qt.conf vicino all'eseguibile" come, esattamente?
John Smith,

Crea file con il contenuto presentato. cd path/to/executable; vim qt.conf, incolla. Salva ed esci.
kyb

Stesso link già in risposta
kyb

0

Collego staticamente tutte le cose Qt alle build Linux generiche dei miei progetti open source. Rende la vita un po 'più facile. Devi solo creare prima le versioni statiche delle librerie Qt. Ovviamente questo non può essere applicato al software closed source a causa di problemi di licenza. La distribuzione delle app Qt5 su Linux è attualmente un po 'problematica, perché Ubuntu 12.04, ad esempio, non ha librerie Qt5 nei repository dei pacchetti.


0

Ho avuto questo problema e per un sospetto ho rimosso le Qt Configs dal mio ambiente. Cioè

rm -rf ~/.config/Qt*

Quindi ho avviato qtcreator e si è riconfigurato con lo stato esistente della macchina. Non ricordava più dove fossero i miei progetti, ma questo significava solo che dovevo sfogliarli "per la prima volta" di nuovo.

Ma ancora più importante si è costruito un insieme coerente di percorsi di libreria, così ho potuto ricostruire ed eseguire di nuovo gli eseguibili del mio progetto senza che le librerie xcb o qxcb andassero perse.


Qtcreator dà lo stesso esatto errore che sto cercando di risolvere. Ovviamente. Perché se trovassi una soluzione funzionante a qualsiasi problema di Linux sul web, non sarebbe Linux. Siamo spiacenti, questo è semplicemente incredibilmente frustrante, un'intera pagina SE di inseguimenti di oca selvaggia senza una singola soluzione utilizzabile su di essa per ottenere semplicemente un pannello desktop in esecuzione su un'installazione di Ubuntu di serie senza errori. Sto diventando molto dubbioso sul fatto che Linux funzioni davvero bene.
John Smith,

Questo non ha aiutato nel mio caso.
Eugene Gr. Philippov

-4

sudo ln -sf /usr/lib/...."adapt-it"..../qt5/plugins/platforms/ / usr / bin /

Crea il collegamento simbolico che manca. Buono per QT! Buono per VLC !!


2
spiega la tua risposta
Anantha Raju C

Non funziona Perché niente funziona. Questa pagina è sbagliata al 100%, nemmeno una delle "soluzioni" qui funziona.
John Smith,

@JohnSmith a giudicare dalla quantità di voti positivi sulle risposte, alcune di esse sicuramente funzionano per alcune persone. Purtroppo niente funziona per te e posso capire la tua frustrazione. Ma se non funziona, prova a fare la tua ricerca e invia una risposta che ha funzionato nel tuo caso. Voglio dire, dai, usi la piattaforma da 5 anni e hai solo 6 risposte? Suggerirei umilmente di restituire alla comunità invece di lamentarsi. Siamo qui per aiutarci a vicenda.
Neurotrasmettitore
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.