Error while deploying Qt5.10 App on linux
-
I'm trying to deploy a simple example on linux manually.
I copied the dependecies required by running
ldd ./binaryFile
inside the app directory
├── app.sh ├── lib └── testApp
inside the lib directory I have
├──lib ├── plugins ├── qml └── other .so files from ldd
and then I run the bash script
#!/bin/sh export LD_LIBRARY_PATH=`pwd`/lib export QML_IMPORT_PATH=`pwd`/lib/qml export QML2_IMPORT_PATH=`pwd`/lib/qml export QT_QPA_PLATFORM_PLUGIN_PATH=`pwd`/lib/plugins/platforms #export QT_DEBUG_PLUGINS=0 ./testApp
but I get this error
This application failed to start because it could not find or load the Qt platform plugin "xcb" in "/home/zed/Desktop/testDep/lib/plugins/platforms". Available platform plugins are: eglfs (from /home/zed/Desktop/testDep/lib/plugins/platforms), linuxfb (from /home/zed/Desktop/testDep/lib/plugins/platforms), minimal (from /home/zed/Desktop/testDep/lib/plugins/platforms), minimalegl (from /home/zed/Desktop/testDep/lib/plugins/platforms), offscreen (from /home/zed/Desktop/testDep/lib/plugins/platforms), vnc (from /home/zed/Desktop/testDep/lib/plugins/platforms), webgl (from /home/zed/Desktop/testDep/lib/plugins/platforms), xcb (from /home/zed/Desktop/testDep/lib/plugins/platforms). Reinstalling the application may fix this problem. ./app.sh: line 7: 1948 Aborted (core dumped) ./testApp
Even though the "xcb" plugin is inside the platforms directory
when I run it using
export QT_DEBUG_PLUGINS=1
I get this debug message
Got keys from plugin meta data ("xcb") QFactoryLoader::QFactoryLoader() checking directory path "/home/zed/Desktop/testDep" ... QFactoryLoader::QFactoryLoader() looking at "/home/zed/Desktop/testDep/app.sh" QElfParser: '/home/zed/Desktop/testDep/app.sh' is not an ELF object "'/home/zed/Desktop/testDep/app.sh' is not an ELF object" not a plugin QFactoryLoader::QFactoryLoader() looking at "/home/zed/Desktop/testDep/testApp" "Failed to extract plugin meta data from '/home/zed/Desktop/testDep/testApp'" not a plugin Cannot load library /home/zed/Desktop/testDep/lib/plugins/platforms/libqxcb.so: (/usr/lib/libQt5XcbQpa.so.5: symbol _ZNK15QPlatformWindow15safeAreaMarginsEv version Qt_5_PRIVATE_API not defined in file libQt5Gui.so.5 with link time reference) QLibraryPrivate::loadPlugin failed on "/home/zed/Desktop/testDep/lib/plugins/platforms/libqxcb.so" : "Cannot load library /home/zed/Desktop/testDep/lib/plugins/platforms/libqxcb.so: (/usr/lib/libQt5XcbQpa.so.5: symbol _ZNK15QPlatformWindow15safeAreaMarginsEv version Qt_5_PRIVATE_API not defined in file libQt5Gui.so.5 with link time reference)" QFactoryLoader::QFactoryLoader() checking directory path "/home/zed/Desktop/testDep/lib/plugins/platforms/platforms" ... QFactoryLoader::QFactoryLoader() checking directory path "/home/zed/Desktop/testDep/platforms" ... This application failed to start because it could not find or load the Qt platform plugin "xcb" in "/home/zed/Desktop/testDep/lib/plugins/platforms".
Is there a way to fix this ?
PS:
Qt Version : 5.10
Compiled on : Kubuntu 18.4
Tested on : Manjaro XFCE 17.1 -
@Script22 If I understood right, you developed your Qt app on Kubuntu 18.4 with Qt 5.10 and then you're deploying such app on Manjaro XFCE 17.1
It looks like you have a Qt libraries version mismatch. From your debug info, libqxcb.so that you deployed in target machine in turn is loading/depending on libQt5XcbQpa.so.5 which seems to be already in target machine
/home/zed/Desktop/testDep/lib/plugins/platforms/libqxcb.so: (/usr/lib/libQt5XcbQpa.so.5: ...
-
@Script22 said in Error while deploying Qt5.10 App on linux:
if I just copy it inside the libs directory would that work
I think so, but you should add that folder explicitly to the environment variable LD_LIBRARY_PATH, something like:
$> export LD_LIBRARY_PATH:/path/to/libs/folder:$LD_LIBRARY_PATH
-
Thanks @Pablo-J-Rogina !!
That fixed it, will pay more attention next time :) -
@Script22 You should take a look at http://doc.qt.io/qt-5/linux-deployment.html
-
Hello, I actually exactly same error with @Script22
I downladed qt 5.15.2 source package.
and I located to /usr/local.but in /usr/local/Qt-5.15.2/plugins/platforms, There is no libxcb.so here.
The result for ls on that folder is below.jin@jin-PNVKB0A0-Samsung-DeskTop:/usr/local/Qt-5.15.2/plugins/platforms$ ls
libqeglfs.so libqminimalegl.so libqoffscreen.so libqwayland-egl.so libqwayland-xcomposite-egl.so libqwebgl.so
libqlinuxfb.so libqminimal.so libqvnc.so libqwayland-generic.so libqwayland-xcomposite-glx.soSo like @Script22 , I moved libxcb.so from /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms
Also I got error like him.So I just decided to set Environment variable QT_QPA_PLATFORM_PLUGIN_PATH to /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms. But I got same error too.
How can I handle it ?