Cross compilation and "Qt5 Super Module" : Unknown Module: location on build

  • Hello,

    I want to cross-compile for Raspberrypi 3 using the same Qt version as raspbian (5.3.x) so I do not use "sysroot".

    I tried to use Qt Git qtbase (branch 5.3) and various modules (quick1, location, declarative, etc. on 5.3 branch) but got no success so I tried the "Super Module" repository which have all modules in submodules and nothing better.

    What I have done to build is:

    mkdir raspi && cd raspi
    git clone of the qt5 latest git repos
    git clone -b 5.3 qt5_sm
    cd qt5_sm
    cp -r ../latest-qt5-git-repos/mkspecs/devices/linux-rpi3-* qtbase/mkspecs/devices/
    ./init-repository -f module-subset=qtbase,qtconnectivity,qtdeclarative,qtimageformats,qtlocation,qtmultimedia,qtquick1,qtquickcontrols,qtscript,qtsensors,qtserialport,qtsvg,qttranslations,qtxmlpatterns
    ./configure -opengl no -device linux-rpi3-g++ -device-option CROSS_COMPILE=/home/dashie/raspi/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf- -opensource -confirm-license -make libs -alsa -widgets -qpa linuxfb -developer-build

    In Qt Creator the kit is ok (using qmake at ~/raspi/qt5_sm/qtbase/bin/qmake) and I can build without issues but I still got Project ERROR: Unknown module(s) in QT: location if I want to use QtLocation.

    Side notes:

    • I do not plan/want to use EGLFS or GL or X so I use linuxfb
    • no sysroot because I do not plan to use another Qt version (for the moment if I can stick with this one)
    • -developer-build permit to use in-source without make install (so no extprefix or prefix here)
    • I use the latest linux-rpi3-* mkspecs to have the correct flags/things for the Pi3 since theses files aren't included in 5.3 (only up to rpi2 it seems)

    Any ideas what I have missed in the build steps or to have Qt Location enabled ?

    I planned to use Qt Quick/QML too but same issue as QtLocation (can't find some headers etc.).

  • Lifetime Qt Champion


    Might be a silly question but did you check that your clone does indeed have QtLocation properly checked out ?

    A side note, developer-build are meant for people hacking on Qt not using it. If you want an "in-place" build you should use the prefix option for that.

  • @SGaist yes the module is properly checked out (ls list his content)
    about developer-build yes that's why I have understand, I will retry with prefix and see if it changes anything

  • I have finished rebuild using -release -prefix ~/raspi/qt5_sm_prefix instead of -developper-build and unfortunately still the same issue with QtLocation not found.

  • Lifetime Qt Champion

    Did you check that the module was built and installed ? If not, then you can do it by hand.

  • @SGaist I don't really know how to check. Some qt*/ have a config.log with failed tests or not (should be ok then, it will just skip some parts like GL or optional dependencies for QtLocation)

    I already used the method of building them by hand (before trying the Super Module) and it install somes files but not all it seems, at least not what should be sufficient to be used.
    When building by hand I used the qmake on $prefix-used-in-configure-for-qtbase/bin/qmake so it use the right Qt5 kit paths.

    The Super Module should build them etc. but I have not found much informations about that other that "just use init-repository, configure, make, make install and that's all".

  • Lifetime Qt Champion

    I'll check the content of the lib folder to see if there's anything missing there, then I'd check the qtlocation build dir,

  • Interestingly QtLocation, noted everywhere as QT += location is only available using positioning instead.

    Now the other issue is that quickcontrol doesn't seems to find Quick even if I do cd qtquick1 && make install.

  • Lifetime Qt Champion

    I just realised, if you disable OpenGL there are likely things that are going to be disabled.

  • Oh you may be right, QtQuick1 doesn't seems to require OpenGL but QtQuick2 however needs it.
    I guess I will needs to do the "sysroot" way then.

Log in to reply