Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Cross compile Qt to work with embedded Linux [Yocto]
Forum Update on Monday, May 27th 2025

Cross compile Qt to work with embedded Linux [Yocto]

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
7 Posts 2 Posters 6.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    B Offline
    Bandar
    wrote on 11 Jun 2017, 08:08 last edited by Bandar 6 Nov 2017, 08:36
    #1

    Hi guys, I hope you are all fine.

    I spent the last 2 weeks trying to cross compile SAM-BA to work with SAMA5D4 process that running Yocto embedded Linux.
    First of all, SAM-BA source code can be found here ( https://github.com/atmelcorp/sam-ba )

    I started by compile SAM-BA on the host machine, and I succeeded. Then start to cross compile SAM-BA by following many tutorials and the last week I focused on http://doc.qt.io/qt-5/embedded-linux.html#configuring-for-a-specific-device

    Since I'm using Yocto I built the sysroot and toolcahin by using this command
    $ bitbake Bandar-Image -c populate_sdk
    which will create a script that will generate all of the necessary files (sysroot and toolchain) on "/opt/poky/2.1.1"

    I configured the terminal for cross compilation by running $ . /opt/poky/2.1.1/environment-setup-cortexa5hf-neon-poky-linux-gnueabi
    $ device=linux-arm-generic-g++
    $ CROSS_COMPILE=arm-poky-linux-gnueabi-
    $ sysroot=/opt/poky-atmel/2.1.1/sysroots/cortexa5hf-neon-poky-linux-gnueabi

    then cd to Qt5.9 dir to run configure file
    $ ./configure -release -opensource -confirm-license -device $device -device-option CROSS_COMPILE=$CROSS_COMPILE -sysroot $sysroot -prefix /usr/local/qt5_targe

    I always get this message:
    Start of Message

    + cd qtbase
    + /home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase/configure -top-level -release -opensource -confirm-license -device linux-arm-generic-g++ -device-option CROSS_COMPILE=arm-poky-linux-gnueabi- -sysroot /opt/poky-atmel/2.1.1/sysroots/cortexa5hf-neon-poky-linux-gnueabi -prefix /usr/local/qt5_targe
    Creating qmake...
    .Done.
    
    This is the Qt Open Source Edition.
    
    You have already accepted the terms of the Open Source license.
    
    Running configuration tests...
    Checking for valid makespec... Note: Also available for Linux: linux-clang linux-icc
    
    ERROR: Cannot compile a minimal program. The toolchain or QMakeSpec is broken.
    
    Check config.log for details.
    

    End of Message

    --config.log messages
    Start of Message

    Command line: -release -opensource -confirm-license -device linux-arm-generic-g++ -device-option CROSS_COMPILE=arm-poky-linux-gnueabi- -sysroot /opt/poky-atmel/2.1.1/sysroots/cortexa5hf-neon-poky-linux-gnueabi -prefix /usr/local/qt5_targe
    executing config test verifyspec
    + cd /home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase/config.tests/common/verifyspec && /home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase/bin/qmake "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared console single_arch" "QMAKE_CFLAGS += --sysroot=/opt/poky-atmel/2.1.1/sysroots/cortexa5hf-neon-poky-linux-gnueabi" "QMAKE_CXXFLAGS += --sysroot=/opt/poky-atmel/2.1.1/sysroots/cortexa5hf-neon-poky-linux-gnueabi" "QMAKE_LFLAGS += --sysroot=/opt/poky-atmel/2.1.1/sysroots/cortexa5hf-neon-poky-linux-gnueabi" -early "CONFIG += cross_compile" /home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase/config.tests/common/verifyspec
    + cd /home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase/config.tests/common/verifyspec && MAKEFLAGS= /usr/bin/make clean && MAKEFLAGS= /usr/bin/make
    > rm -f verifyspec.o
    > rm -f *~ core *.core
    > arm-poky-linux-gnueabi-g++ -c -pipe -mfloat-abi=softfp --sysroot=/opt/poky-atmel/2.1.1/sysroots/cortexa5hf-neon-poky-linux-gnueabi -O2 -std=gnu++11 -Wall -W -fPIC  -I. -I/home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase/mkspecs/devices/linux-arm-generic-g++ -o verifyspec.o verifyspec.cpp
    > arm-poky-linux-gnueabi-g++ -mfloat-abi=softfp --sysroot=/opt/poky-atmel/2.1.1/sysroots/cortexa5hf-neon-poky-linux-gnueabi -Wl,-O1 -o verifyspec verifyspec.o    
    > /opt/poky-atmel/2.1.1/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/5.3.0/real-ld: error: verifyspec uses VFP register arguments, verifyspec.o does not
    > /opt/poky-atmel/2.1.1/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/5.3.0/real-ld: failed to merge target specific data of file verifyspec.o
    > collect2: error: ld returned 1 exit status
    > Makefile:67: recipe for target 'verifyspec' failed
    > make: *** [verifyspec] Error 1
    

    End of Message
    Thanks in advance.

    1 Reply Last reply
    0
    • S Online
      S Online
      sierdzio
      Moderators
      wrote on 12 Jun 2017, 08:28 last edited by
      #2

      You are mixing hard float with soft float ABIs, but they are incompatible.

      -mfloat-abi=softfp --sysroot=/opt/poky-atmel/2.1.1/sysroots/cortexa5hf-neon-poky-linux-gnueabi
      

      ABI is set to softp, but you provide "hf" (==hardfloat) sysroot. I suspect that might be the issue. Please modify the mkspecs to use the correct ABI for your platform (probably hard float, judging from the sysroot).

      (Z(:^

      1 Reply Last reply
      2
      • B Offline
        B Offline
        Bandar
        wrote on 12 Jun 2017, 13:28 last edited by Bandar 6 Dec 2017, 13:29
        #3

        Sierdzio, Thanks for your reply

        I added these lines to my qmake.conf

        QMAKE_CFLAGS           += -mfloat-abi=hard -march=armv7-a -mtune=cortex-a5
        QMAKE_CXXFLAGS         += $$QMAKE_CFLAGS
        

        and I ran this configure with option "-no-opengl" because I faced error regarding opengl so I ignored it until I can build SAM-BA..
        it generates Makefile for Qt with success. :)
        But, when I tried to install Qt by executing this line

        make -j 9 ARCH=arm CROSS_COMPILE=$CROSS_COMPILE
        

        I got 2 errors
        1-

        //your code herearm-poky-linux-gnueabi-g++ -mfloat-abi=softfp --sysroot=/opt/poky-atmel/2.1.2/sysroots/cortexa5hf-neon-poky-linux-gnueabi -Wl,--no-undefined -Wl,--version-script,QtDBus.version -Wl,-O1 -Wl,-z,origin -Wl,-rpath,\$ORIGIN -shared -Wl,-soname,libQt5DBus.so.5 -o libQt5DBus.so.5.9.0 .obj/qdbusconnection.o .obj/qdbusconnectioninterface.o .obj/qdbuserror.o .obj/qdbusintegrator.o .obj/qdbusmessage.o .obj/qdbusserver.o .obj/qdbusabstractinterface.o .obj/qdbusinterface.o .obj/qdbusxmlparser.o .obj/qdbusutil.o .obj/qdbusintrospection.o .obj/qdbusabstractadaptor.o .obj/qdbusinternalfilters.o .obj/qdbusmetaobject.o .obj/qdbusxmlgenerator.o .obj/qdbusmisc.o .obj/qdbusargument.o .obj/qdbusreply.o .obj/qdbusmetatype.o .obj/qdbusextratypes.o .obj/qdbuscontext.o .obj/qdbuspendingcall.o .obj/qdbuspendingreply.o .obj/qdbus_symbols.o .obj/qdbusservicewatcher.o .obj/qdbusunixfiledescriptor.o .obj/qdbusvirtualobject.o .obj/moc_qdbusconnectioninterface.o .obj/moc_qdbusconnection.o .obj/moc_qdbusabstractadaptor.o .obj/moc_qdbusvirtualobject.o .obj/moc_qdbusconnection_p.o .obj/moc_qdbusconnectionmanager_p.o .obj/moc_qdbuspendingcall_p.o  -L/home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase/lib -lQt5Core -lpthread -ldbus-1 
        /opt/poky-atmel/2.1.2/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/5.3.0/real-ld: cannot find -ldbus-1
        collect2: error: ld returned 1 exit status
        Makefile:274: recipe for target '../../lib/libQt5DBus.so.5.9.0' failed
        make[3]: *** [../../lib/libQt5DBus.so.5.9.0] Error 1
        make[3]: Leaving directory '/home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase/src/dbus'
        Makefile:402: recipe for target 'sub-dbus-make_first' failed
        make[2]: *** [sub-dbus-make_first] Error 2
        make[2]: *** Waiting for unfinished jobs....
        

        2-

        make[3]: Leaving directory '/home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase/src/network'
        make[2]: Leaving directory '/home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase/src'
        Makefile:49: recipe for target 'sub-src-make_first' failed
        make[1]: *** [sub-src-make_first] Error 2
        make[1]: Leaving directory '/home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase'
        Makefile:83: recipe for target 'module-qtbase-make_first' failed
        make: *** [module-qtbase-make_first] Error 2
        

        error log file URL:
        http://m.uploadedit.com/ba3s/1497273954324.txt

        1 Reply Last reply
        0
        • S Online
          S Online
          sierdzio
          Moderators
          wrote on 13 Jun 2017, 05:20 last edited by
          #4

          Interestingly, I can still see -mfloat-abi=softfp there in the first line of your output.

          And analyzing the log, here is how g++ is invoked:

          arm-poky-linux-gnueabi-g++ -c -include .pch/Qt5Network -pipe -mfloat-abi=softfp -pipe -mfloat-abi=softfp -mfloat-abi=hard
          

          However, the error you are getting is about a missing dependency: linker can't find dbus library in your system/ toolchain.

          (Z(:^

          1 Reply Last reply
          1
          • B Offline
            B Offline
            Bandar
            wrote on 13 Jun 2017, 10:46 last edited by
            #5

            Thanks Sierdzio, I included the dbus to the rootfs..and it solved Error#1
            but I still getting error#2

            arm-poky-linux-gnueabi-g++ -mfloat-abi=softfp --sysroot=/opt/poky-atmel/2.1.3/sysroots/cortexa5hf-neon-poky-linux-gnueabi -Wl,-O1 -Wl,-z,origin -Wl,-rpath,\$ORIGIN/../../../../lib -o tooltips .obj/main.o .obj/shapeitem.o .obj/sortingbox.o .obj/qrc_tooltips.o .obj/moc_sortingbox.o   -L/home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase/lib -lQt5Widgets -lQt5Gui -lQt5Core -lpthread 
            make[5]: Leaving directory '/home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase/examples/widgets/widgets/tooltips'
            make[5]: Leaving directory '/home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase/examples/widgets/widgets/tetrix'
            make[4]: Leaving directory '/home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase/examples/widgets/widgets'
            make[3]: Leaving directory '/home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase/examples/widgets'
            make[2]: Leaving directory '/home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase/examples'
            Makefile:74: recipe for target 'sub-examples-make_first' failed
            make[1]: *** [sub-examples-make_first] Error 2
            make[1]: Leaving directory '/home/u77/Qt5.9/qt-everywhere-opensource-src-5.9.0/qtbase'
            Makefile:83: recipe for target 'module-qtbase-make_first' failed
            make: *** [module-qtbase-make_first] Error 2
            

            I searched for keywords, such as (cannot, no such file, exist, not, error, failed ..) but I couldn't find something obvious to me :(.

            error log file URL:
            http://m.uploadedit.com/ba3s/14973506677.txt

            1 Reply Last reply
            0
            • S Online
              S Online
              sierdzio
              Moderators
              wrote on 13 Jun 2017, 10:56 last edited by
              #6

              Do a clean rebuild (delete your build dir, run configure again, then make), because this output does not show any actual error message or what has failed. When configuring Qt, run it without examples, too (add -nomake examples to configure).

              Also, add -mfloat-abi=hard to linker commands, in addition to C and CXX flags you already have added.

              (Z(:^

              1 Reply Last reply
              3
              • B Offline
                B Offline
                Bandar
                wrote on 17 Jun 2017, 15:32 last edited by
                #7

                Thanks for reply, I got error on missing libs.
                working on it, if it build with success I'll post here.

                1 Reply Last reply
                0

                1/7

                11 Jun 2017, 08:08

                • Login

                • Login or register to search.
                1 out of 7
                • First post
                  1/7
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • Users
                • Groups
                • Search
                • Get Qt Extensions
                • Unsolved