Cross-compiling RPi application using Qt Creator



  • Here is the message what I get after executing build command:

    The OpenGL ES 2.0 functionality test failed!
     Use of pkg-config is not enabled, maybe you want to pass -force-pkg-config?
     You might need to modify the include and library search paths by editing
     QMAKE_INCDIR_OPENGL_ES2, QMAKE_LIBDIR_OPENGL_ES2 and QMAKE_LIBS_OPENGL_ES2 in
     c:/Users/pyo/Downloads/qt-everywhere-opensource-src-5.5.0/qtbase/mkspecs/devices/linux-rasp-pi-g++.
    

    Any ideas ?


  • Moderators

    Device should be linux-rasp-pi3-g++ or if you want EGLFS with full OpenGL support, linux-rasp-pi3-vc4-g++



  • With linux-rasp-pi3-g++ I get this:
    Error: No device matching 'linux-rasp-pi3-g++'



  • alt text


  • Moderators

    Oh, Qt 5.5? Yes, that came out before Raspberry Pi 3 was on the market. I strongly recommend compiling a more modern version of Qt. Even Raspbian OS (which is veeery outdated) ships Qt 5.7...



  • I took source from here:
    qt-everywhere-src-5.12.3
    Can you provide link with more recent version.
    Thanks



  • @Pavel_47 that's latest version so far

    please be aware that a previous post from you has ../qt-everywhere-opensource-src-5.5.0/configure that's why I think @sierdzio brought that out.



  • So, what about original problem: what location use in bulding command - linux-rasp-pi-g++ or linux-rasp-pi2-g++ ?


  • Moderators

    @Pavel_47 said in Cross-compiling RPi application using Qt Creator:

    So, what about original problem: what location use in bulding command - linux-rasp-pi-g++ or linux-rasp-pi2-g++ ?

    All your input so far suggest you are actually compiling Qt 5.5. Please make sure you're working with the 5.12.3 source you downloaded.



  • Yes !!! Misunderstanding with my colleague - I believed that folder qt-everywhere-opensource-src-5.5.0 corresponds to the latest source of Qt. Indeed there are new device folder that correspond to RPi3: linux-rasp-pi3-g++ and linux-rasp-pi3-vc4-g++. What is the difference between them ?
    Thanks.



  • @Pavel_47 Ok, I see - OpenGL support



  • Error while building !

    Preparing build tree...
    Creating qmake...
    ..............................c:/Users/pyo/Downloads/qt-everywhere-src-5.12.3/qtbase/src/corelib/global/qglobal.cpp:
    In function 'QString qEnvironmentVariable(const char*, const QString&)':
    c:/Users/pyo/Downloads/qt-everywhere-src-5.12.3/qtbase/src/corelib/global/qglobal.cpp:3346:49: error: '_wgetenv_s' was not declared in this scope
         _wgetenv_s(&requiredSize, 0, 0, wname.data());
                                                     ^
    make.exe: *** [qglobal.o] Error 1
    


  • Indeed, I've hierarchically searched for _wgetenv_s through whole qt-everywhere-src-5.12.3 (.cpp and .h) and found that it's referenced only in qglobal.cpp ... and declared/defined nowhere.



  • On this link the author propose a workaround (although I'm not sure if this workaround is valid for my case).
    Anyway I've added this instruction (i.e. defined MINGW_HAS_SECURE_API flag as suggested)
    DEFINES += UNICODE _UNICODE WIN32 MINGW_HAS_SECURE_API=1
    in ...\win32-g++\qmake.conf
    Unfortunately it didn't help



  • Well, I reported this issue as bug on
    https://bugreports.qt.io/


  • Moderators

    Sounds like something that would not happen on Linux. I have never encountered this error, so I can only wish you luck :D



  • @Pablo-J.-Rogina said in Cross-compiling RPi application using Qt Creator:

    @Pavel_47 you may want to try this guide, in particular the section to setup Qt Creator

    Well, having problem with building toolchain under Windows, I decided to switch to Linux.
    But in Linux I've also met problem while configuring Qt. Here is the result if executing ./configure:

    Project ERROR: Cannot run target compiler 'g++'. Output:
    ===================
    Using built-in specs.
    COLLECT_GCC=g++
    g++: error: unrecognized command line option '-mfpu=crypto-neon-fp-armv8'
    g++: error: unrecognized command line option '-mfloat-abi=hard'
    Target: x86_64-linux-gnu
    Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04.3' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
    Thread model: posix
    gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) 
    ===================
    Maybe you forgot to setup the environment?
    

  • Moderators

    @Pavel_47 said in Cross-compiling RPi application using Qt Creator:

    gcc version 4.8.4

    Ancient stuff... I hope RPi will update their toolchain finally some day.

    --target=x86_64-linux-gnu

    Looks like you are not building for ARM. Either wrong toolchain or wrong ./configure flags.



  • Here is configure I've just used:

    ./configure -release -opengl es2 -device linux-rasp-pi3-vc4-g++ -device-option CROSS-COMPILE=~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf -sysroot ~/raspi/sysroot -opensource -confirm-license -make libs -prefix /usr/local/qt5pi -extprefix ~/raspi/qt5pi -hostprefix ~/raspi/qt5 -no-use-gold-linker -v
    

  • Moderators

    @Pavel_47 said in Cross-compiling RPi application using Qt Creator:

    CROSS-COMPILE

    Should be CROSS_COMPILE.

    Also, on some systems (very rarely) ~/ does not work correctly, in such case use $HOME/ or full path instead.



  • Indeed, there was typo.
    I corrected and rerun configure. New error:

    pyo@AREStest:~/raspi/qt-everywhere-src-5.12.3/qtbase$ ./configure -release -opengl es2 -device linux-rasp-pi3-vc4-g++ -device-option CROSS_COMPILE=~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- -sysroot ~/raspi/sysroot -opensource -confirm-license -make libs -prefix /usr/local/qt5pi -extprefix ~/raspi/qt5pi -hostprefix ~/raspi/qt5 -no-use-gold-linker -v
    Creating qmake...
    make: Nothing to be done for `first'.
    Command line: -release -opengl es2 -device linux-rasp-pi3-vc4-g++ -device-option CROSS_COMPILE=/home/pyo/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- -sysroot /home/pyo/raspi/sysroot -opensource -confirm-license -make libs -prefix /usr/local/qt5pi -extprefix /home/pyo/raspi/qt5pi -hostprefix /home/pyo/raspi/qt5 -no-use-gold-linker -v
    
    This is the Qt Open Source Edition.
    
    You have already accepted the terms of the Open Source license.
    
    Running configuration tests...
    
    + /home/pyo/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++ -dumpmachine
    > arm-linux-gnueabihf
    Checking for valid makespec... 
    + cd /home/pyo/raspi/qt-everywhere-src-5.12.3/qtbase/config.tests/verifyspec && /home/pyo/raspi/qt-everywhere-src-5.12.3/qtbase/bin/qmake "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared warn_off console single_arch" "QMAKE_CFLAGS += --sysroot=/home/pyo/raspi/sysroot" "QMAKE_CXXFLAGS += --sysroot=/home/pyo/raspi/sysroot" "QMAKE_LFLAGS += --sysroot=/home/pyo/raspi/sysroot" -early "CONFIG += cross_compile" /home/pyo/raspi/qt-everywhere-src-5.12.3/qtbase/config.tests/verifyspec
    + cd /home/pyo/raspi/qt-everywhere-src-5.12.3/qtbase/config.tests/verifyspec && MAKEFLAGS= /usr/bin/make clean && MAKEFLAGS= /usr/bin/make
    > rm -f verifyspec.o
    > rm -f *~ core *.core
    > /home/pyo/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++ -c -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8 -mfloat-abi=hard --sysroot=/home/pyo/raspi/sysroot -O2 -std=gnu++11 -w -fPIC  -I. -I/home/pyo/raspi/qt-everywhere-src-5.12.3/qtbase/mkspecs/devices/linux-rasp-pi3-vc4-g++ -o verifyspec.o verifyspec.cpp
    > /home/pyo/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++ -mfloat-abi=hard --sysroot=/home/pyo/raspi/sysroot -Wl,-O1 -Wl,-rpath-link,/home/pyo/raspi/sysroot/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link,/home/pyo/raspi/sysroot/lib/arm-linux-gnueabihf -o verifyspec verifyspec.o      
    > /home/pyo/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld:/home/pyo/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/lib/libstdc++.so: file format not recognized; treating as linker script
    > /home/pyo/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld:/home/pyo/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/lib/libstdc++.so:1: syntax error
    > collect2: error: ld returned 1 exit status
    > make: *** [verifyspec] Error 1
    Note: Also available for Linux: linux-clang linux-icc
    
    ERROR: Cannot compile a minimal program. The toolchain or QMakeSpec is broken.
    

  • Moderators

    Don't rerun configure. Clear your build directory completely and then run configure again. Easiest way to do it is to build outside of source dir.

    Also, contrary to what the guide says, it's recommended to build using main configure script, not one located in qtbase. But ignore that for now, let's first get qtbase built :-)



  • In the manual cleaning is performed with following command
    git clean -dfx
    In my case I didn't use git because my Linux machine has no connection to internet.
    So, I downloaded source in Windows, then moved it to Linux machine.
    So, should I just remove bin folder ?


  • Moderators

    @Pavel_47 said in Cross-compiling RPi application using Qt Creator:

    In the manual cleaning is performed with following command
    git clean -dfx
    In my case I didn't use git because my Linux machine has no connection to internet.
    So, I downloaded source in Windows, then moved it to Linux machine.
    So, should I just remove bin folder ?

    Configure and make spew out files in many other places. Move it again, start fresh.

    I'm not 100% sure it will help, but it very well might.



  • @sierdzio said in Cross-compiling RPi application using Qt Creator:

    Configure and make spew out files in many other places.

    I removed source folder and copied the fresh one.
    Then I created new folder fro where I executed configure.
    This new attempt also failed with similar error message:

    Command line: -release -opengl es2 -device linux-rasp-pi3-vc4-g++ -device-option CROSS_COMPILE=/home/pyo/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- -sysroot /home/pyo/raspi/sysroot -opensource -confirm-license -make libs -prefix /usr/local/qt5pi -extprefix /home/pyo/raspi/qt5pi -hostprefix /home/pyo/raspi/qt5 -no-use-gold-linker -v
    Info: creating stash file /home/pyo/raspi/qt5/.qmake.stash
    
    This is the Qt Open Source Edition.
    
    You have already accepted the terms of the Open Source license.
    
    Running configuration tests...
    Checking for machine tuple... 
    + /home/pyo/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++ -dumpmachine
    > arm-linux-gnueabihf
    test config.qtbase.tests.machineTuple succeeded
    Checking for valid makespec... 
    + cd /home/pyo/raspi/qt5/config.tests/verifyspec && /home/pyo/raspi/qt5/bin/qmake "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared warn_off console single_arch" "QMAKE_CFLAGS += --sysroot=/home/pyo/raspi/sysroot" "QMAKE_CXXFLAGS += --sysroot=/home/pyo/raspi/sysroot" "QMAKE_LFLAGS += --sysroot=/home/pyo/raspi/sysroot" -early "CONFIG += cross_compile" /home/pyo/raspi/qt-everywhere-src-5.12.3/qtbase/config.tests/verifyspec
    > Info: creating stash file /home/pyo/raspi/qt5/config.tests/.qmake.stash
    + cd /home/pyo/raspi/qt5/config.tests/verifyspec && MAKEFLAGS= /usr/bin/make
    > /home/pyo/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++ -c -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8 -mfloat-abi=hard --sysroot=/home/pyo/raspi/sysroot -O2 -std=gnu++11 -w -fPIC  -I/home/pyo/raspi/qt-everywhere-src-5.12.3/qtbase/config.tests/verifyspec -I. -I/home/pyo/raspi/qt-everywhere-src-5.12.3/qtbase/mkspecs/devices/linux-rasp-pi3-vc4-g++ -o verifyspec.o /home/pyo/raspi/qt-everywhere-src-5.12.3/qtbase/config.tests/verifyspec/verifyspec.cpp
    > /home/pyo/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++ -mfloat-abi=hard --sysroot=/home/pyo/raspi/sysroot -Wl,-O1 -Wl,-rpath-link,/home/pyo/raspi/sysroot/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link,/home/pyo/raspi/sysroot/lib/arm-linux-gnueabihf -o verifyspec verifyspec.o      
    > /home/pyo/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld:/home/pyo/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/lib/libstdc++.so: file format not recognized; treating as linker script
    > /home/pyo/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld:/home/pyo/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/lib/libstdc++.so:1: syntax error
    > collect2: error: ld returned 1 exit status
    > make: *** [verifyspec] Error 1
    Note: Also available for Linux: linux-clang linux-icc
    
    ERROR: Cannot compile a minimal program. The toolchain or QMakeSpec is broken.
    

Log in to reply