Qt 5.7 and cross compile



  • I try to cross compile in ubuntu. But I get this error:
    Failed to process makespec for platform 'devices/linux-rpi3-g++'
    Project ERROR: Compiler /home/nikohal/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++ not found. Check the value of CROSS_COMPILE -device-option
    Could not read qmake configuration file /home/nikohal/qt-everywhere-opensource-src-5.7.0/qtbase/mkspecs/devices/linux-rpi3-g++/qmake.conf.
    Error processing project file: /dev/null
    nikohal@nikohal-VirtualBox:~/qt-everywhere-opensource-src-5.7.0$
    How I can fix this?
    Br, Niko H.



  • What is the command you are running?

    Does the file

    /home/nikohal/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++
    

    exist?



  • @I.C.Wiener Yes it is there. But some reason it not found.

    Br, Niko H.



  • @I.C.Wiener I also try installing lib32z1 lib32ncurses5 lib32bz2-1.0 packages, but not help.



  • So what command are you running?



  • @I.C.Wiener
    In path was error, but now I get this error:
    checking for C++11...
    /home/nikohal/raspi/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++ -c -march=armv8-a+crc -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8 -pipe -Os -mthumb -std=c++1z -mfloat-abi=hard --sysroot=/home/nikohal/raspi/sysroot -O2 -std=gnu++11 -Wall -W -fPIC -I. -I../../../mkspecs/devices/linux-rpi3-g++ -o c++11.o c++11.cpp
    /home/nikohal/raspi/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
    make: *** [c++11.o] Error 127
    C++11 disabled.
    ERROR: Qt requires a C++11 compiler and yours does not seem to be that.
    Please upgrade.
    In path was "tools" what I have wasn't



  • @I.C.Wiener Command is configure. I also install packages libc6-i386 lib32z1 lib32stdc++6. And now It give this error:
    /home/nikohal/raspi/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++ -c -march=armv8-a+crc -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8 -pipe -Os -mthumb -std=c++1z -mfloat-abi=hard --sysroot=/home/nikohal/raspi/sysroot -O2 -std=gnu++11 -Wall -W -fPIC -I. -I../../../mkspecs/devices/linux-rpi3-g++ -o c++11.o c++11.cpp
    arm-linux-gnueabihf-g++: virhe: unrecognized argument in option ”-march=armv8-a+crc”
    arm-linux-gnueabihf-g++: huom: valid arguments to ”-march=” are: armv2 armv2a armv3 armv3m armv4 armv4t armv5 armv5e armv5t armv5te armv6 armv6-m armv6j armv6k armv6s-m armv6t2 armv6z armv6zk armv7 armv7-a armv7-m armv7-r armv7e-m armv8-a iwmmxt iwmmxt2 native
    arm-linux-gnueabihf-g++: virhe: unrecognized command line option ”-std=c++1z”
    make: *** [c++11.o] Error 1
    C++11 disabled.
    ERROR: Qt requires a C++11 compiler and yours does not seem to be that.
    Please upgrade.



  • What command did you execute? The whole command line please.
    And please try to use

    // Code markers
    

    for console output and commands.



  • @I.C.Wiener Command is:

     ./configure -release -opengl es2 -device linux-rpi3-g++ -device-option CROSS_COMPILE=~/raspi/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- -sysroot ~/raspi/sysroot -opensource -confirm-license -make libs -prefix /usr/local/qt5pi -extprefix ~/raspi/qt5pi -hostprefix ~/raspi/qt5 -v
    And I run it in folder qtbase.
    


  • I had some success by installing

    g++-arm-linux-gnueabihf
    

    and then replacing

    CROSS_COMPILE=~/raspi/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-
    

    by

    CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf-
    

    In general I was trying to cross-compile Qt5.7 for Raspi 3 for some days, made some progress but in the end, the result was not convincing. I guess the raspi-tools need some updating for raspi 3 and Qt5.7 respectively.



  • @I.C.Wiener Yes I install that from ubuntu repository, but it give that error.

    /usr/bin/arm-linux-gnueabihf-g++ -c -march=armv8-a+crc -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8 -pipe -Os -mthumb -std=c++1z -mfloat-abi=hard --sysroot=/home/nikohal/raspi/sysroot -g -Wall -W -fPIC  -I. -I../../mkspecs/devices/linux-rpi3-g++ -o arch.o arch.cpp
    arm-linux-gnueabihf-g++: error: unrecognized command line option ‘-std=c++1z’
    make: *** [arch.o] Error 1
    Unable to determine architecture!
    
    Could not determine the target architecture!
    Turn on verbose messaging (-v) to see the final report.
    Determining architecture... ()
    g++ -c -pipe -g -Wall -W -fPIC  -I. -I../../mkspecs/linux-g++ -o arch.o arch.cpp
    g++  -o arch arch.o    
        Found architecture in binary
    CFG_HOST_ARCH="x86_64"
    CFG_HOST_CPUFEATURES=" mmx sse sse2"
    System architecture: 'unknown'
    Host architecture: 'x86_64'
    Precompiled-headers support enabled.
    /usr/bin/arm-linux-gnueabihf-g++ -c -fvisibility=hidden fvisibility.c
    Symbol visibility control enabled.
    /usr/bin/arm-linux-gnueabihf-g++ --sysroot=/home/nikohal/raspi/sysroot -o libtest.so -shared -Wl,-Bsymbolic-functions -fPIC bsymbolic_functions.c
    bsymbolic_functions.c:2:2: error: #error "Symbolic function binding on this architecture may be broken, disabling it (see QTBUG-36129)."
     #error "Symbolic function binding on this architecture may be broken, disabling it (see QTBUG-36129)."
      ^
    Symbolic function binding disabled.
    checking for C++11... 
    /usr/bin/arm-linux-gnueabihf-g++ -c -march=armv8-a+crc -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8 -pipe -Os -mthumb -std=c++1z -mfloat-abi=hard --sysroot=/home/nikohal/raspi/sysroot -O2 -std=gnu++11 -Wall -W -fPIC  -I. -I../../../mkspecs/devices/linux-rpi3-g++ -o c++11.o c++11.cpp
    arm-linux-gnueabihf-g++: error: unrecognized command line option ‘-std=c++1z’
    make: *** [c++11.o] Error 1
    C++11 disabled.
    ERROR: Qt requires a C++11 compiler and yours does not seem to be that.
    Please upgrade.
    

    I Google that, but nothing similar not found



  • Hmm, sorry. I do not have my cross-compiling environment set up anymore (it was too fiddly so I now compile on the Raspi3 directly) but I remember me playing around with the qtbase/mkspecs/common/g++-base.conf file. Like changing the -std=c++1z line to -std=c++11, so cheating a little bit. I guess if arm-linux-gnueabihf-g++ does not know c++1z yet, there's not much else you can do.



  • @I.C.Wiener I have now this problem in raspberry pi 3. I try to compile in there qt, but it give this error:

    Running configuration tests...
    Failed to process makespec for platform 'devices/linux-rasp-pi-g++'
    Project ERROR: CROSS_COMPILE needs to be set via -device-option CROSS_COMPILE=<path>
    Could not read qmake configuration file /home/pi/qt-everywhere-opensource-src-5.7.0/qtbase/mkspecs/devices/linux-rasp-pi-g++/qmake.conf.
    Error processing project file: /dev/null
    

    My configure is:

    ./configure -v -xcb -tslib -force-pkg-config -device linux-rasp-pi-g++ -opensource -confirm-license -optimized-qmake -reduce-exports -release -qt-pcre -make libs  -prefix /usr/local/qt5 2>&1 | tee config.out
    


  • @I.C.Wiener I try to change that line, but now I get this error:

    Symbolic function binding disabled.
    checking for C++11...
    /usr/bin/g++ -c -march=armv8-a+crc -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8 -pipe -Os -mthumb -std=c++1z -mfloat-abi=hard -O2 -std=gnu++11 -Wall -W -fPIC  -I. -I../../../mkspecs/devices/linux-rpi3-g++ -o c++11.o c++11.cpp
    g++: error: unrecognized command line option â-std=c++1zâ
    Makefile:417: recipe for target 'c++11.o' failed
    make: *** [c++11.o] Error 1
    C++11 disabled.
    ERROR: Qt requires a C++11 compiler and yours does not seem to be that.
    Please upgrade.
    

    How I can fix this?



  • @Niko-Hallikainen
    I too stuckup with the same issue,can you please help on the same.1 day wasted on the same error.it would be great help for me on ur suggestion.

    Thanks In advance



  • @shivaVMC what about following this guide?



  • @Pablo-J.-Rogina
    I followed the complete procedure as per below link,Just changed the V_5.7.1 to my V_5.7.0
    https://lb.raspberrypi.org/forums/viewtopic.php?t=204529
    Still I m having the same issue can you please help me out on this,Almost I have spent 8 Houors on sorting this error.It will a kind support to reduce me tension.

    Thanks In advance



  • @Pablo-J.-Rogina
    Initially I was following that guide only,but I failed at beloe step
    git clone git://code.qt.io/qt/qtbase.git -b linux-rasp-pi3-g++
    Cloning into 'qtbase'...
    fatal: Remote branch linux-rasp-pi3-g++ not found in upstream origin



  • @shivaVMC said in Qt 5.7 and cross compile:

    git clone git://code.qt.io/qt/qtbase.git -b linux-rasp-pi3-g++

    You need to specify what Qt branch (i.e. 5.7, ..., 5.10, etc.) you want to clone from Git repository, let's say you want to cross-compile Qt 5.10:

    git clone git://code.qt.io/qt/qtbase.git -b 5.10
    

    then you'll have a folder qtbase will all the sources to build Qt 5.10



  • @Pablo-J.-Rogina
    Hi Rogina,
    Thank You,Thanks alot for quick response.
    Your Comments/Suggestions are perfect to fix my issue.
    Everything Looks fine now and my problem is solved.

    Excellent...!!!



  • @Pablo-J.-Rogina
    HI Again
    I m using 2 different version of QT as
    my PC installed with QT5.7.0
    My Rpi3 Kit installed with QT5.10.1
    Now I compiled the code and it went well in my PC,Same ".exe" I run in rpi3kit it gave me an error as below

    "cannot execute binary file: Exec format error
    Application finished with exit code 126."

    Please can you suggest on this.

    Where I m going wrong?Is I need to install QT5.10.1 on my PC also?



  • @shivaVMC said in Qt 5.7 and cross compile:

    Where I m going wrong?

    You are mixing pears and apples :-)

    Different Qt versions is not the issue here, the problem is different platform/architecture: your PC is x86 (I assume) while RPi is ARM

    Remember that whatever Qt version you use in your RPi you would need to cross-compile in your PC



  • @Pablo-J.-Rogina
    Hi Rogina,
    Finally I m successful in compiling the code and running on my target Board,Thanks alot .

    But during runtime,I m facing with below error as
    Unable to query physical screen size, defaulting to 100 dpi.
    To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters).
    QFontDatabase: Cannot find font directory /usr/local/qt5pi/lib/fonts.
    Note that Qt no longer ships fonts. Deploy some (from http://dejavu-fonts.org for example) or switch to fontconfig.
    Can you plesae help on this.


  • Moderators

    @shivaVMC said in Qt 5.7 and cross compile:

    Unable to query physical screen size, defaulting to 100 dpi.

    This is not an error, you can safely ignore it.

    And if you want to solve it, just do what the next line says (export the 2 variables before launching your app).

    QFontDatabase: Cannot find font directory /usr/local/qt5pi/lib/fonts.
    Note that Qt no longer ships fonts. Deploy some (from http://dejavu-fonts.org for example) or switch to fontconfig.

    Here the error message mentions the solution, too. Just do what it says :-) Either put some fonts in the path where Qt is looking for them, or ship your own in a resource (QRC) with your app and install them at runtime.



  • @sierdzio
    Excellent Site...!!!
    The above suggestion worked out for me.
    Now,I m poting my Windows based developed Qt application to Linux,can you please suggest the best procedure to follow for quick porting.
    Thanks In advance.


  • Moderators

    @shivaVMC said in Qt 5.7 and cross compile:

    Now,I m poting my Windows based developed Qt application to Linux,can you please suggest the best procedure to follow for quick porting.

    That's worthy of a new thread. If you encounter any issues during porting, feel free to open a new topic and we'll try to help.

    In general, if your app only uses Qt APIs, then in most cases there is nothing to port. You need to compile your app and Linux and it will just work. If you do use some OS-specific APIs then each such case is different and it's impossible to give general advice on this.

    If you need to distribute your Linux app, take a look into linuxdeployqt, it's excellent for producing ready-to-run packages - and in case of issues the guy who wrote it is really helpful. AppImage output is built-in, and if you want to produce DEB and RPM packages, you can reuse linuxdeployqt's output using fpm. More info on how to do it: https://github.com/probonopd/linuxdeployqt/issues/9



  • @sierdzio
    Hi sierdzio,
    I have compiled the Windows Qt code,but I m facing issue as below.
    test.cpp:(.text+0x3b8): undefined reference to QwtScaleMap::setScaleInterval(double, double)' test.cpp:(.text+0x3c8): undefined reference toQwtScaleMap::setScaleInterval(double, double)'
    test.cpp:(.text+0x3e0): undefined reference to QwtScaleMap::setScaleInterval(double, double)' test.o: In functiontest::test(QWidget*)':
    test.cpp:(.text+0x494): undefined reference to QwtScaleMap::QwtScaleMap()' test.cpp:(.text+0x4a0): undefined reference toQwtScaleMap::QwtScaleMap()'
    test.cpp:(.text+0x4c0): undefined reference to QwtPlotCurve::QwtPlotCurve(QString const&)' test.cpp:(.text+0x554): undefined reference toQwtSymbol::QwtSymbol(QwtSymbol::Style, QBrush const&, QPen const&, QSize const&)'
    test.cpp:(.text+0x560): undefined reference to QwtPlotCurve::setSymbol(QwtSymbol*)' test.cpp:(.text+0x590): undefined reference toQwtPlotCurve::setPen(QColor const&, double, Qt::PenStyle)'
    test.cpp:(.text+0x59c): undefined reference to QwtPlotCurve::setStyle(QwtPlotCurve::CurveStyle)' test.cpp:(.text+0x610): undefined reference toQwtScaleMap::~QwtScaleMap()'
    test.cpp:(.text+0x618): undefined reference to QwtScaleMap::~QwtScaleMap()' test.cpp:(.text+0x64c): undefined reference toQwtPlotCurve::~QwtPlotCurve()'

    Exactly which library I need to add to avoid these error's.

    Please can I get suggestion/support on this?

    Thanks In addvance


  • Moderators

    You need the Qwt library.

    But since it's not usually available on Windows, I suspect you already do have Qwt in your sources.



  • @sierdzio
    Yeah I do have Qwt in my src directory.
    src/qwt_scale_map.h
    src/qwt_global.h
    src/qwt_transform.h
    src/qwt_plot_curve.h
    src/qwt_plot_seriesitem.h
    src/qwt_plot_item.h
    src/qwt_text.h
    src/qwt_legend_data.h
    src/qwt_graphic.h
    src/qwt_null_paintdevice.h \

    But still I m getting the undefined reference type of error's(As mentioned above). What could be the reason for this.


  • Moderators

    @shivaVMC said in Qt 5.7 and cross compile:

    But still I m getting the undefined reference type of error's(As mentioned above). What could be the reason for this

    • symbols are really missing (check the sources).
    • you don't #include relevant headers


  • @shivaVMC you were already told:

    That's worthy of a new thread.

    so could you please start a thread on its own regarding Qwt and Windows?

    The issue you're now interested about has nothing to do with the original subject of post (which it was not even started by you by the way). Thanks



  • This post is deleted!

Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.