GNU/Linux >> Linux Esercitazione >  >> Linux

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

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.


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 si trovano i plugin della piattaforma (ad es. piattaforme/plugins/libqxcb.so) in fase di 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 usando qt.conf


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 binario stesso con ldd come suggerito qui, e "soddisfatto" tutte le dipendenze "non trovate". Poi questo famigerato This application failed to start because it could not find or load the Qt platform plugin "xcb" è stato generato un errore.

Come risolvere questo problema in Linux

Innanzitutto dovresti creare platforms directory in cui si trova il tuo binario, perché è il luogo in cui Qt cerca la libreria XCB. Copia libqxcb.so là. Mi chiedo perché gli autori di altre risposte non ne abbiano parlato.

Quindi potresti voler eseguire il tuo binario con QT_DEBUG_PLUGINS=1 variabile d'ambiente impostata per controllare quali dipendenze di libqxcb.so non sono "soddisfatti". (Puoi anche usare ldd per questo come suggerito nella risposta accettata).

L'output del comando potrebbe essere simile a questo:

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

Nota il libQt5DBus.so.5 non riuscito biblioteca. Copialo nel percorso delle tue librerie, nel mio caso era la stessa directory in cui si trova il mio binario (da qui LD_LIBRARY_PATH=. ). Ripeti questo processo finché tutte le dipendenze non sono soddisfatte.

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


Linux
  1. I moduli del kernel Linux di cui non possiamo fare a meno

  2. Spostare file su Linux senza mv

  3. Come testare un pacchetto senza installarlo in Linux

  4. Kali Linux - Piattaforma di test di penetrazione

  5. Hai bisogno di una piccola distribuzione senza un desktop o un gestore di Windows, solo per eseguire una singola app grafica

Storia delle patch live del kernel Linux

Come elencare i pacchetti installati in Linux

11 comandi Linux di cui non posso fare a meno

Errore del plug-in VPN Linux non riuscito - E adesso?

Linux o Windows:25 cose da sapere quando si sceglie la piattaforma migliore

Che cos'è la media del carico in Linux?