Cross compile Qt (Windows) to Raspberry 3
-
Hi,
I've been looking for informations on how to configure the cross compilation on qt (windows) for the raspberry 3. I don't know if it's the place to write it, but for people who are interested in, here is how I did the cross compilation beetwee windows 8 and raspberry pi 3 (debian jessie).Most of steps come from the tuto here : http://visualgdb.com/tutorials/raspberry/qt/embedded/
Based on that, here are the changes I made to make it work for the rpi3 :-
Open this : http://visualgdb.com/tutorials/raspberry/qt/embedded/
-
Follow STEP 2.
-
WARNING : For step 3, you need to change MinGW32 with MinGW64 with gcc >= 4.9. So download it, and install it in C:/SysGCC/MinGW64
-
Follow step 4.
-
For step 5., download qt-everywhere >= 5.6 (otherwise rpi3 won't be supported)
-
Follow step 6.
-
From here, all the cmd line on the terminal must be done on msys2 MinGW64 !
Download MSYS2, install it in C:/SysGCC/MinGW64/msys2
Open mingw64_shell
Run those cmd to update the needed libs :pacman -S make pacman -S perl pacman -S pkg-config pacman -S diffutils
Continue the tuto with this shell
-
Follow step 8.
-
Step 9 : check that gcc is linked to MinGW64/bin/gcc.exe
-
Follow 10. and 11.
-
For step 12, change "linux-rasp-pi2-g++" to "linux-rpi3-g++"
PS : you can add the "-nomake examples" in the configure cmd lines if you don't need them to save time
PS2 : opengl and libxcb may have some link troubles, I removed them, I use linuxfb -
Follow 13-14-15
-
Follow step 16
Ex : In my case, the cmd was :../qt-everywhere-opensource-src-5.6.1/configure -platform win32-g++ -xplatform linux-arm-gnueabi-g++ -release -device linux-rpi3-g++ -sysroot C:/SysGCC_RPi3/Raspberry/arm-linux-gnueabihf/sysroot -prefix /usr/local/qt5 -device-option CROSS_COMPILE=C:/SysGCC_RPi3/Raspberry/bin/arm-linux-gnueabihf- -nomake examples -opensource -confirm-license
-
Now, if you're configuration file has been well generated, launch "make && make install" (step 17.)
-
Copy the built qt from C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot/usr/local/qt5 to your pi3 in /usr/local/qt5 (step 18 - end)
There should be different ways to make it work, maybe this is not the best one, but it works for me. Hope it's helpful, sorry if i'ts not the place.
Etienne
-
-
All fine until step 13.
Excuting the following command:
../qt-everywhere-opensource-src-5.6.1/configure -platform win32-g++ -xplatform linux-arm-gnueabi-g++ -release -device linux-rpi3-g++ -sysroot F:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot -prefix /usr/local/qt5 -device-option CROSS_COMPILE=F:/SysGCC/Raspberry/bin/arm-linux-gnueabihf- -nomake examples -opensource -confirm-license -qt-xcb -v
generates a lot of error messages like:
... arm-linux-gnueabihf-g++.exe: error: unrecognized command line option '-std=c++1z' ...Any advise?
======================================================
Update:- I finally gave up on cross compile
- installed QT/Creator on pi3 (actually the build time for what I'm doing is not too bad)
- vnc access from PC is ok
-
Hi,
I'm trying to install QT5.7 environment with Raspberry PI3 support. I'm using MINGW64 and QT-everywhere 5.7.0. For some reason 5.7.0 requires c++11, which my env doesn't have. Step 16 will fail for that. QT 5.6.1 is fine with c++, but is having problems OpenGL ES 2.0.
Would be great if some guru would update instructions for RPI3.
Thanks in advance.
Br,
Hannu==============================
edit:
- When merged linux-arm-gnueabi-g++\qmake.conf from QT-everywhere 5.7.0 to 5.6.1 OpenGL problem was solved.
- "pacman -S python" was also needed for make
-
If the steps is not appear, then following the steps in https://visualgdb.com/tutorials/raspberry/qt/embedded/, otherwise using the steps below instead
-
Step 3: Download gcc 4.9.2 for Windows
https://wiki.qt.io/MinGW
https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/tools_mingw/
The download URL is
https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/tools_mingw/qt.tools.win32_mingw492/4.9.2-1i686-4.9.2-release-posix-dwarf-rt_v3-rev1.7z
extract as C:/SysGCC/mingw32
gcc would placed at C:/SysGCC/mingw32/bin/gcc.exe -
Step 5: Download Qt 5.8.0/Qt 5.6.1 source
and extract as
C:\SysGCC\qt-everywhere-opensource-src-5.8.0
There is path C:\SysGCC\qt-everywhere-opensource-src-5.8.0\qtbase -
Step 6: Sync sysroot
/lib /usr/include /usr/lib /usr/local/include /usr/local/lib /opt /opt/vc
-
Step 7: Install MSYS2
Download newest msys2 from http://www.msys2.org/
http://repo.msys2.org/distrib/x86_64/msys2-x86_64-20161025.exe
Install it.
open msys2/mingw32.exepacman -S make perl pkg-config diffutils
Close the shell
-
Steop 8: Edit
~/.bashrc
Append following linesexport PATH=$PATH:/c/SysGCC/mingw32/bin export PATH=$PATH:/c/Python27 export PATH=$PATH:/c/SysGCC/Raspberry/bin mkdir -p /c/SysGCC/qt-build cd /c/SysGCC/qt-build
open msys2/mingw32.exe
-
Step 9: Check that gcc is linked to
C:/SysGCC/mingw32/bin/gcc.exe
-
Step10: Prepare the source code
Copy folderqt-everywhere-opensource-src-5.8.0\qtbase\mkspecs\linux-arm-gnueabi-g++\
and it's contents as
qt-everywhere-opensource-src-5.8.0\qtbase\mkspecs\linux-arm-gnueabihf-g++\
in folderqt-everywhere-opensource-src-5.8.0\qtbase\mkspecs\linux-arm-gnueabihf-g++\
grep -irn arm-linux-gnueabi- arm-linux-gnueabihf- .
Edit
qt-everywhere-opensource-src-5.8.0\qtbase\mkspecs\devices\linux-rpi3-g++\qmake.conf
Replace part lines with (This should also works for Qt 5.6.1, not tested for OpenGL ES):VC_LIBRARY_PATH = $$[QT_SYSROOT]/opt/vc/lib VC_INCLUDE_PATH = $$[QT_SYSROOT]/opt/vc/include QMAKE_LFLAGS += -L$${VC_LIBRARY_PATH} VC_LINK_LINE = -L$${VC_LIBRARY_PATH}
-
Step 12: Configure for Host & Target(Only Qt 5.8 and upper, Qt 5.7 not tested)
For Qt 5.8 Host & Target
No step 16, results are in step 16.../qt-everywhere-opensource-src-5.8.0/configure -skip qtscript -platform win32-g++ -xplatform linux-arm-gnueabihf-g++ -release -device linux-rpi3-g++ -sysroot C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot -prefix /usr/local/qt5 -device-option CROSS_COMPILE=C:/SysGCC/Raspberry/bin/arm-linux-gnueabihf- -nomake examples -opensource -confirm-license
For Qt 5.6 and lower, Only Host
../qt-everywhere-opensource-src-5.6.1/configure -skip qtscript -platform win32-g++ -xplatform linux-arm-gnueabihf-g++ -release -device linux-rpi3-g++ -sysroot C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot -prefix /usr/local/qt5 -opensource -confirm-license
-
Step13: Skip
-
Step 14: This is normal as long as qmake.exe got built. Check this by running
qtbase/bin/qmake -v
-
Step 15: Skip
-
Step 16: Configure the Target (Only Qt 5.6 and lower), otherwise Skip it
Remove-std=c++1z
fromqt-everywhere-opensource-src-5.6.1\qtbase\mkspecs\devices\linux-rpi3-g++\qmake.conf
Qt 5.6.x execute the following command../qt-everywhere-opensource-src-5.6.1/configure -skip qtscript -platform win32-g++ -xplatform linux-arm-gnueabihf-g++ -release -device linux-rpi3-g++ -sysroot C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot -prefix /usr/local/qt5 -device-option CROSS_COMPILE=C:/SysGCC/Raspberry/bin/arm-linux-gnueabihf- -nomake examples -opensource -confirm-license
-
Step 17: Building And Install
make && make install
-
-
I do all the tuto and i can make a excutable with qt but the qlabel and the qpushbutton it isn't show. i think it's because when create the qmake the modul gtk isn't enable. when i try to enable it that said
ERROR: Feature 'gtk3' was enabled, but the pre-condition 'features.glib && libs.gtk3' failed.
it's do 1 week i try to fine how to fix the pre-condition.
-
@CrazyCreepy "qlabel and the qpushbutton it isn't show" - what does it mean? Are they not shown at all, or no text?
For gtk3 support you probably need to install gtk3 dev packages, but it actually should work without.
If there is no text then you probably have some font issues. -
@jsulm I mean the label and push button doesn't exist! if i wants to close my windows i will use httop... it work without gtk3 but not all feature is enable and this can be very problematic later... and i installe Gtk3 on my rasp, but they change noting i need to configure in my compiler but i don't know how .
-
@CrazyCreepy As I said you need to install gtk3/glib dev packages on your RPi/sysroot and then build Qt (there is nothing to configure in compiler).
"label and push button doesn't exist" - you probably mean - they are not shown? -
that what i get on my raspberry pi
and that was i get
I have already install the glib and gtk3 on my raspberry... I also try to syncronize all of my raspberry pi with smartputty in my sysroot and it's doesn't work... I'm little exhausted of this.... thanks for help.
-
Hello.
Very good instructions to config QT5 for RPY3 with cross. I try to install but fail in step6, seem some permissions problem, but do not know why, I work with Administrator user, and I have change permissions to all files to get access to all users.
This is capture screen about fail when I try to run step 6 to syncronize sysroot. Somebody may help me, why fail ??. Translation to english language about the error message is "Cannot connect: Try to access to one socket not allowed because your access permissions 192.168.1.7"
If I run directly StmarTTY from Windows work perfectly, but I run SmarTTY from a DOS window also fail with same error message,
-
.
Hello.
My before problem was because the firewall, already solved. I have follow instructions of lystate user, and all seem ok but fail in last step, with this error message.
Somebody know how to solve this problem to may compile ??
.
And this is the content of the config.log file:
executing config test use_gold_linker
cd C:\SysGCC\qt-build\qtbase\config.tests && C:/SysGCC/Raspberry/bin/arm-linux-gnueabihf-g++ -fuse-ld=gold -o conftest-out conftest.cpp
cc1plus.exe: error: unrecognized command line option '-fuse-ld=gold'test config.qtbase.tests.use_gold_linker FAILED
executing config test verifyspeccd C:\SysGCC\qt-build\qtbase\config.tests\common\verifyspec && C:\SysGCC\qt-build\qtbase\bin\qmake.exe -qtconf C:/SysGCC/qt-build/qtbase/bin/qt.conf "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared console" "QMAKE_CFLAGS += --sysroot=C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot" "QMAKE_CXXFLAGS += --sysroot=C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot" "QMAKE_LFLAGS += --sysroot=C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot" C:/SysGCC/qt-everywhere-opensource-src-5.8.0/qtbase/config.tests/common/verifyspec
cd C:\SysGCC\qt-build\qtbase\config.tests\common\verifyspec && set MAKEFLAGS=& C:/SysGCC/msys2/usr/bin/make
C:/SysGCC/Raspberry/bin/arm-linux-gnueabihf-g++ -c -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8 -mfloat-abi=hard --sysroot=C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot -O2 -Wall -W -fPIC -IC:/SysGCC/qt-everywhere-opensource-src-5.8.0/qtbase/config.tests/common/verifyspec -I. -IC:/SysGCC/qt-everywhere-opensource-src-5.8.0/qtbase/mkspecs/devices/linux-rpi3-g++ -o verifyspec.obj C:/SysGCC/qt-everywhere-opensource-src-5.8.0/qtbase/config.tests/common/verifyspec/verifyspec.cpp
cc1plus.exe: error: bad value (armv8-a) for -march switch
cc1plus.exe: error: bad value (cortex-a53) for -mtune switchC:/SysGCC/qt-everywhere-opensource-src-5.8.0/qtbase/config.tests/common/verifyspec/verifyspec.cpp:1:0: error: invalid floating point option: -mfpu=crypto-neon-fp-armv8
make: *** [Makefile:176: verifyspec.obj] Error 1
executing config test verifyspeccd C:\SysGCC\qt-build\qtbase\config.tests\common\verifyspec && C:\SysGCC\qt-build\qtbase\bin\qmake.exe -qtconf C:/SysGCC/qt-build/qtbase/bin/qt.conf "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared console" "QMAKE_CFLAGS += --sysroot=C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot" "QMAKE_CXXFLAGS += --sysroot=C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot" "QMAKE_LFLAGS += --sysroot=C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot" C:/SysGCC/qt-everywhere-opensource-src-5.8.0/qtbase/config.tests/common/verifyspec
cd C:\SysGCC\qt-build\qtbase\config.tests\common\verifyspec && set MAKEFLAGS=&
C:/SysGCC/msys2/usr/bin/make clean && set MAKEFLAGS=& C:/SysGCC/msys2/usr/bin/make
rm -f verifyspec.obj
rm -f *~ core *.coreC:/SysGCC/Raspberry/bin/arm-linux-gnueabihf-g++ -c -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8 -mfloat-abi=hard --sysroot=C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot -O2 -Wall -W -fPIC -IC:/SysGCC/qt-everywhere-opensource-src-5.8.0/qtbase/config.tests/common/verifyspec -I. -IC:/SysGCC/qt-everywhere-opensource-src-5.8.0/qtbase/mkspecs/devices/linux-rpi3-g++ -o verifyspec.obj C:/SysGCC/qt-everywhere-opensource-src-5.8.0/qtbase/config.tests/common/verifyspec/verifyspec.cpp
cc1plus.exe: error: bad value (armv8-a) for -march switch
cc1plus.exe: error: bad value (cortex-a53) for -mtune switchC:/SysGCC/qt-everywhere-opensource-src-5.8.0/qtbase/config.tests/common/verifyspec/verifyspec.cpp:1:0: error: invalid floating point option: -mfpu=crypto-neon-fp-armv8
make: *** [Makefile:176: verifyspec.obj] Error 1