Qt World Summit: Register Today!

Qt project deployment on rpi 3 board

  • I am done with cross compiling Qt 5.10.1 for rpi 3 board and took me nearly 7-8 days. now everything is set and when i tried to run the deployed project on rpi3 :
    The error popped out:
    relocation error: ./hello: symbol _ZTVN10_cxxabiv120_si_class_type_infoE, version Qt_5 not defined in file libQt5core.so.5 with link time reference.

    i have used follwing website for cross compilation

    this may be issue of old version libraries on rpi as i haev downloaded qt4-x11 on rpi as per this tutorial. am i correct ??? please help me, if anybody having any idea??

  • @hem1

    This may be a stupid question, but when you have done a cross compile of Qt 5.10.1 for rpi,why are you not using the output of your cross compile?

  • @koahnig said in Qt project deployment on rpi 3 board:

    the output of your cross compi

    i am compiling a simple program on my desktop on which i have crosscompiled for rpi3 and then deploying on rpi and while executing program requires libraries which are already downloaded on rpi thats how things work, if i am not wrong?

  • @hem1

    I have done the same, but for beaglebone. At least that is my understanding of what you describe.

    When you cross-compile Qt source for rpi or beaglebone you are generating all dynamic loadable libraries for execution on rpi and the library stubs for linking on a desktop.

    I have basically copied the cross-compiled Qt stuff to my beaglebone and use

    export LD_LIBRARY_PATH=/home/ubuntu/QtForBBB/lib:.

    on beaglebone before I am starting the cross-compiled application. In my case "/home/ubuntu/QtForBBB/lib" is the place of the cross-compiled libraries.
    I am lazy and upload my application to the home folder and start from there. Therefore, I had to add "." for my application to find its own dynamically loadable libraries.

    Note: I am a windows boy. Therefore, I am reducing my efforts on linux to a minimum, because I am not really used to work with linux.

  • @koahnig sry but i am a newbie i only understood half of what you said, mine also first experience with linux and am struggling a lot

  • @hem1

    Do you have Qt installed on a desktop ?
    What is the OS there?

  • @koahnig yes QT is installed Qt 5.10.1 ubuntu 16 is OS used

  • @hem1

    I guess you have installed Qt creator and the latest version of Qt library.
    Qt creator is a "simple" IDE and helps you managing projects. It is using Qt libraries as well, but they have to be kept separately from the Qt libraries used for development.

    The standard Qt libraries may be installed with your linux distro or you can update/install it with an online installer from Qt site. The difference is mainly the actuality of version. Since you have Qt 5.10.1 I assume that you picked already the online installer approach, which is fundamentally better since you have the direct hook to most recent updates.

    The Qt library installation is in general based on dynamic loadable libraries. The different modules have separate libraries. For each module two separate libs are required. The stub lib will be basically linked statically to your application and tells it how to access the dynamically loadable libs. And of course there is also the dynamic loadable library itself.

    Within the development process on a desktop you do not really notice those different libraries. However, when you want to deploy your application on to a different desktop, you need to supply your application and the dynamic library as used by that application.

    When you develop for an embedded platform you need to cross-compile Qt libraries with a cross-compiler suitable for your embedded platform. With the cross-compilation you are generating adapted tools, but also the cross-compiled libraries similar as you have already installed for your desktop.

    Building an application for an embedded requires using the cross-compiler and the library stubs generated with that cross-compiler. Deploying your application basically requires the linked application and the required cross-compiled dynamic loadable libraries. Those libraries are found in the "lib" folder of your cross-compilation of Qt libraries.

    Since memory was not my concern, I simply copied the whole cross-compilation to my beaglebone. The export statement given above provided before is simply telling my application where the dynamic libs are to be found.

    Note, that different versions of Qt libs downloaded to your rpi may not be compatible with the applications you have created. It looks that you found some Qt4 libraries, which are definetly not compatible with Qt5 cross-compilation.

  • @koahnig said in Qt project deployment on rpi 3 board:

    y not be compatible with the applications you have created. It looks that you found some Qt4 libraries, which are definetly not compatible with Qt5 cross-compilation.

    then how should i download qt5 libraries
    i mean people have used qt4-x11 for their deployment with Qt5.8 so where is the issue i am not able to get it. do u have any idea how i can download Qt5 libraries?

  • @hem1 said in Qt project deployment on rpi 3 board:

    qt4-x11 for their deployment with Qt5.8

    qt4 means Qt 4 libraries which are not even source compatible with Qt 5. There is no way that this is working in general.

    You may find and use Qt5.8 compiled by someone, but you can use those only possibly with some luck with Qt5.8 libraries you have cross compiled. However, any version of Qt 4 is not compatible with any Qt 5 version.

    My cross compilation of Qt gave me everything in a separate sub-folder on my desktop. Since I knew that all that stuff is cross-compiled for beaglebone, I simply used "scy" and copied it my beaglebone.

  • This error happens when you compile with one version but another one is found at runtime, either you need to deploy your libraries, plugins and qml and configured to be found by ld or compile for another version


Log in to reply