Nominate our 2022 Qt Champions!

IMX6 Cross Compilation - Failed to process makespec

  • I have been having a problem cross compiling Qt 5.3.2 from source targeting an IMX6 quad processor. I am using Yocto with 1.7.1 SDK for development. Here is my ./configure:

    ./configure -device linux-imx6-g++ -arch arm -release -opengl es2 -device-option CROSS_COMPILE=/opt/poky/1.7.1/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi- -sysroot /opt/poky/1.7.1/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi -prefix ~/Desktop/qt_test -v -no-gcc-sysroot

    The error is as shown after a file minutes of compilation:

    .. .. .o qnumeric.o qcryptographichash.o qxmlstream.o qxmlutils.o qlogging.o qjson.o qjsondocument.o qjsonparser.o qjsonarray.o qjsonobject.o qjsonvalue.o qfilesystemengine_unix.o qfilesystemiterator_unix.o qfsfileengine_unix.o qlocale_unix.o -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -Wl,--gc-sections Running configuration tests... Failed to process makespec for platform 'devices/linux-imx6-g++' /opt/Qt5.3.2/SDK/qt-everywhere-opensource-src-5.3.2/qtbase/bin/qmake: 1: /opt/Qt5.3.2/SDK/qt-everywhere-opensource-src-5.3.2/qtbase/bin/qmake: Syntax error: word unexpected (expecting ")")*

    Here is also my environment that I source just prior to running ./configure:

    It looks like the problem is caused by an incorrect qmake executable being created at qtbase/bin/qmake. Any ideas on how to solve this elusive error?


  • Lifetime Qt Champion


    Might be silly question but did you modify the mkspec file ?

  • Nope, but I was able to solve the problem by using Yocto to bitbake the image instead of cross compiling manually.

  • Lifetime Qt Champion

    Then it'll stay a mystery...

  • Well, I'm back at it trying to get this to work again with Qt 5.5.0 release. I still arrive at the same error using the identical configure statement and environment path.

    The changelog for 5.5.0 states:

    EGLFS has a plugin-based backend mechanism in addition to the existing, statically compiled-in solution. Most compiled-in hooks are converted to be dynamically loaded plugins that are built based on configure time tests. This reduces the reliance on the device makespecs for RPi, i.MX6 and Mali-based devices.

    Which can probably explain why much of the code in the /mkspecs/devices/linux-imx6-g++/qmake.conf file has been omitted. Here is the new qmake.conf

     # qmake configuration for the Freescale iMX6 boards (single, dual and quad)
    QMAKE_LIBS_EGL         += -lEGL
    QMAKE_LIBS_OPENVG      += -lOpenVG -lEGL -lGAL
    IMX6_CFLAGS             = -march=armv7-a -mfpu=neon -DLINUX=1 -DEGL_API_FB=1
    QMAKE_CFLAGS           += $$IMX6_CFLAGS
    DISTRO_OPTS += hard-float
    # Preferred eglfs backend

    I still can't seem to find why this does not build correctly. Any thoughts?

  • Lifetime Qt Champion

    Did you check Yocto's configuration/Qt patching ?

  • Good point!

    Looking in, I see 11 patches that are applied. This is maybe why Qt is unable to configure itself properly. I've been trying to bitbake the SDK now statically inside of Yocto without any luck thus far.

  • Lifetime Qt Champion

    Where is the static build failing ?

  • The static build is failing inside of Yocto. All I have done to get this to fail is to change -shared to -static inside of and then $ bitbake meta-toolchain-qt5. Building Qt dynamically will successfully create the SDK, but not statically.

    I have found someone with the exact same problem here. The plugin lib directory path is incorrect and has the cross compile prefix omitted causing problems finding the necessary libraries.

    I've posted my build environment and error output here.

Log in to reply