GNU/Linux >> Znalost Linux >  >> Linux

Při spouštění aplikace qt5 na linuxu bez nainstalovaného qt se nepodařilo načíst plugin xcb platformy

Použijte ldd (man ldd) k zobrazení závislostí sdílené knihovny. Spuštění na libqxcb.so

.../platforms$ ldd libqxcb.so

ukazuje, že xcb závisí na libQt5DBus.so.5 kromě libQt5Core.so.5 a libQt5Gui.so.5 (a mnoha dalších systémových knihoven). Přidejte libQt5DBus.so.5 do své sbírky sdílených knihoven a měli byste být připraveni jít dál.


Jak bylo uvedeno dříve, musíte se ujistit, že při nasazení aplikace nainstalujete zásuvné moduly platformy. V závislosti na tom, jak chcete věci nasadit, existují dva způsoby, jak své aplikaci sdělit, kde jsou zásuvné moduly platformy (např. platformy/plugins/libqxcb.so) za běhu, což vám může vyhovovat.

První je exportovat cestu k adresáři prostřednictvím proměnné QT_QPA_PLATFORM_PLUGIN_PATH.

QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins ./my_qt_app

nebo

export QT_QPA_PLATFORM_PLUGIN_PATH=path/to/plugins
./my_qt_app

Další možností, kterou preferuji, je vytvořit soubor qt.conf ve stejném adresáři jako váš spustitelný soubor. Jeho obsah by byl:

[Paths]
Plugins=/path/to/plugins

Více informací o tomto lze nalézt zde a na použití qt.conf


Pokusil jsem se spustit svůj binární soubor zkompilovaný s Qt 5.7 , na Ubuntu 16.04 LTS, kde Qt 5.5 je předinstalovaný. Nefungovalo to.

Nejprve jsem zkontroloval samotnou binárku pomocí ldd jak zde bylo navrženo, a "uspokojil" všechny "nenalezeno" závislosti. Pak tento notoricky známý This application failed to start because it could not find or load the Qt platform plugin "xcb" byla vyvolána chyba.

Jak to vyřešit v Linuxu

Nejprve byste měli vytvořit platforms adresář, kde je váš binární soubor, protože je to místo, kde Qt hledá knihovnu XCB. Zkopírujte libqxcb.so tam. Zajímalo by mě, proč to autoři jiných odpovědí nezmínili.

Pak možná budete chtít spustit binární soubor s QT_DEBUG_PLUGINS=1 nastavená proměnná prostředí pro kontrolu závislostí libqxcb.so nejsou "spokojeni". (Můžete také použít ldd za tímto účelem, jak je navrženo v přijaté odpovědi).

Výstup příkazu může vypadat takto:

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

Všimněte si nefunkčního libQt5DBus.so.5 knihovna. Zkopírujte jej do cesty ke svým knihovnám, v mém případě to byl stejný adresář, kde je můj binární soubor (proto LD_LIBRARY_PATH=. ). Tento postup opakujte, dokud nebudou splněny všechny závislosti.

P.S. děkuji autorovi této odpovědi za QT_DEBUG_PLUGINS=1 .


Linux
  1. Moduly linuxového jádra, bez kterých nemůžeme žít

  2. Přesouvání souborů na Linuxu bez mv

  3. Jak otestovat balíček bez jeho instalace v Linuxu

  1. Jak přidat tiskárnu v Linux Mint 12 | Přidejte tiskárnu v Linux Mintu

  2. Linux – Co by se stalo, kdyby pevný disk selhal, zatímco linuxové jádro běželo?

  3. OpenGL bez X.org v linuxu

  1. Jak otevřít Appimage v Linuxu

  2. Kali Linux – platforma pro penetrační testování

  3. Potřebujete malé distro bez desktopu nebo správce oken, stačí spustit jedinou grafickou aplikaci