Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

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: ...



  • Yes, I developed on Kubuntu and deploying on manjaro.

    So how to work around that ? I guess I should not replace that file as it would probably break something that manjaro uses, if I just copy it inside the libs directory would that work ?



  • @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 :)


  • Lifetime Qt Champion



  • 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.so

    So 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.
    209d32f2-2251-49f2-86ea-960b184a4e54-image.png

    92418832-e4e0-4256-945f-2891671d1e51-image.png
    How can I handle it ?


  • Lifetime Qt Champion

    @JinPark How exactly did you install Qt in /usr/local?
    "I downladed qt 5.15.2 source package." - do you mean you downloaded Qt source code and build it by yourself?


Log in to reply