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


  • Moderators


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.