Native compile Qt 5.12.3 and 5.12.4 in Raspberry pi 3 Model B+
Based in the version of raspbian
pi@piapartament:~ $ cat /etc/os-release PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)" NAME="Raspbian GNU/Linux" VERSION_ID="9" VERSION="9 (stretch)" ID=raspbian ID_LIKE=debian HOME_URL="http://www.raspbian.org/" SUPPORT_URL="http://www.raspbian.org/RaspbianForums" BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs" pi@piapartament:~ $ uname -a Linux piapartament 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux
INSTALL DEPENDENCIES
Maybe all of them are not necessary, anyway they are the result of lots of testing
$ sudo apt-get build-dep qt4-x11 $ sudo apt-get build-dep libqt5gui5 $ sudo apt-get build-dep qtbase-opensource-src $ sudo apt-get install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 $ sudo apt install qtcreator cmake default-libmysqlclient-dev libpq-dev qt5-default libqt5svg5-dev libqt5sql5-psql libqt5sql5-mysql libpq-dev libpng-dev build-essential comerr-dev libaudio-dev libaudio2 libc6-dev libexpat1-dev libfontconfig1-dev libfreetype6-dev libgl1-mesa-dev libglib2.0-dev libglu1-mesa-dev libice-dev libkrb5-dev libpq-dev libpq5 libsm-dev libsqlite0-dev libssl-dev libx11-dev libxau-dev libxcb1-dev libxcursor-dev libxdmcp-dev libxext-dev libxfixes-dev libxft-dev libxi-dev libxinerama-dev libxmu-dev libxmu-headers libxrandr-dev libxrender-dev libxt-dev linux-libc-dev mesa-common-dev mysql-common x11proto-core-dev x11proto-fixes-dev x11proto-input-dev x11proto-kb-dev x11proto-randr-dev x11proto-render-dev x11proto-xext-dev x11proto-xinerama-dev xtrans-dev zlib1g-dev libmysqlcppconn-dev libcups2-dev libcupsimage2-dev libtiff-dev libjpeg-dev libjpeg62-turbo-dev libxcb-xinerama0 libxcb-xinerama0-dev libqt5gstreamer-dev libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-glx0-dev libasound2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libqt5sql5-ibase libqt5multimedia5 qtmultimedia5-dev libqt5multimedia5-plugins libxkbcommon-dev libxkbcommon-x11-0 libxkbcommon-x11-dev libxkbcommon0 libudev1 udev $ sudo apt install libfontconfig1-dev libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync0-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev
FIX THE EGL MESS IN THE RPI3
I proceeded in a "radical" way.
I deleted the incorrect libraries libEGL
I created links for the brcm libraries to these files
root@pipis:/opt/vc/lib# ls -l total 3384 -rw-r--r-- 1 root root 99516 mai 17 19:31 libbcm_host.so -rw-r--r-- 1 root root 202072 mai 17 19:31 libbrcmEGL.so -rw-r--r-- 1 root root 105768 mai 17 19:31 libbrcmGLESv2.so -rw-r--r-- 1 root root 99208 mai 17 19:31 libbrcmOpenVG.so -rw-r--r-- 1 root root 78552 mai 17 19:31 libbrcmWFC.so -rw-r--r-- 1 root root 364540 mai 17 19:31 libcontainers.so -rw-r--r-- 1 root root 15828 mai 17 20:18 libdebug_sym.so -rw-r--r-- 1 root root 13102 mai 17 20:18 libdebug_sym_static.a -rw-r--r-- 1 root root 53088 mai 17 19:31 libdtovl.so lrwxrwxrwx 1 root root 13 jun 19 13:14 libEGL.so -> libbrcmEGL.so lrwxrwxrwx 1 root root 9 jun 19 13:19 libEGL.so.1 -> libEGL.so -rw-r--r-- 1 root root 202072 feb 20 11:56 libEGL.so.ORIG -rw-r--r-- 1 root root 245356 mai 17 20:18 libEGL_static.a -rw-r--r-- 1 root root 344732 mai 17 19:31 libelftoolchain.so lrwxrwxrwx 1 root root 12 feb 20 11:56 libGLESv1_CM.so -> libGLESv2.so lrwxrwxrwx 1 root root 16 jun 19 13:15 libGLESv2.so -> libbrcmGLESv2.so lrwxrwxrwx 1 root root 12 jun 19 13:19 libGLESv2.so.2 -> libGLESv2.so -rw-r--r-- 1 root root 105768 feb 20 11:56 libGLESv2.so.ORIG -rw-r--r-- 1 root root 100076 mai 17 20:18 libGLESv2_static.a -rw-r--r-- 1 root root 13548 mai 17 20:18 libkhrn_client.a -rw-r--r-- 1 root root 450544 mai 17 20:18 libkhrn_static.a -rw-r--r-- 1 root root 68884 mai 17 19:31 libmmal_components.so -rw-r--r-- 1 root root 82168 mai 17 19:31 libmmal_core.so -rw-r--r-- 1 root root 15368 mai 17 19:31 libmmal.so -rw-r--r-- 1 root root 91040 mai 17 19:31 libmmal_util.so -rw-r--r-- 1 root root 44424 mai 17 19:31 libmmal_vc_client.so -rw-r--r-- 1 root root 33208 mai 17 19:31 libopenmaxil.so lrwxrwxrwx 1 root root 16 jun 19 23:49 libOpenVG.so -> libbrcmOpenVG.so -rw-r--r-- 1 root root 99200 feb 20 11:56 libOpenVG.so.OLD -rw-r--r-- 1 root root 30288 mai 17 19:31 libvchiq_arm.so -rw-r--r-- 1 root root 140520 mai 17 20:18 libvchostif.a -rw-r--r-- 1 root root 28462 mai 17 20:18 libvcilcs.a -rw-r--r-- 1 root root 169364 mai 17 19:31 libvcos.so -rw-r--r-- 1 root root 23136 mai 17 19:31 libvcsm.so lrwxrwxrwx 1 root root 13 jun 19 23:49 libWFC.so -> libbrcmWFC.so -rw-r--r-- 1 root root 78552 feb 20 11:56 libWFC.so.OLD drwxr-xr-x 2 root root 4096 jun 18 01:18 pkgconfig drwxr-xr-x 3 root root 4096 feb 20 11:56 plugins root@pipis:/usr/lib/arm-linux-gnueabihf# ls -l *EGL* lrwxrwxrwx 1 root root 15 ago 4 2017 libEGL.so -> libEGL.so.1.0.0 lrwxrwxrwx 1 root root 15 ago 4 2017 libEGL.so.1 -> libEGL.so.1.0.0 lrwxrwxrwx 1 root root 21 jun 19 13:06 libEGL.so.1.0.0 -> /opt/vc/lib/libEGL.so root@pipis:/usr/lib/arm-linux-gnueabihf# ls -l *GLES* lrwxrwxrwx 1 root root 21 ago 4 2017 libGLESv1_CM.so.1 -> libGLESv1_CM.so.1.1.0 -rw-r--r-- 1 root root 17704 ago 4 2017 libGLESv1_CM.so.1.1.0 lrwxrwxrwx 1 root root 18 ago 4 2017 libGLESv2.so -> libGLESv2.so.2.0.0 lrwxrwxrwx 1 root root 18 jun 19 23:54 libGLESv2.so.2 -> libGLESv2.so.2.0.0 lrwxrwxrwx 1 root root 24 jun 19 13:06 libGLESv2.so.2.0.0 -> /opt/vc/lib/libGLESv2.so
INCREASE THE RPI SWAP SPACE
If the swap space is not increased, it produces strange errors due to lack of memory during compilation
These errors can be missleading, as they can be identified as compilation, configuration errors or bugs.
- IMPORTANT!!! INCREASE SWAP SPACE TO 900MB
- IMPORTANT!!! INCREASE SWAP SPACE TO 900MB
root@piapartament:/etc# cat dphys-swapfile ... CONF_SWAPSIZE=900
GET THE QT SOURCES
Tested in both qt 5.12.3 and 5.12.4
$ wget http://download.qt.io/official_releases/qt/5.12/5.12.3/single/qt-everywhere-src-5.12.3.tar.xz $ tar -xJvf qt-everywhere-src-5.12.3.tar.xz $ wget http://download.qt.io/official_releases/qt/5.12/5.12.4/single/qt-everywhere-src-5.12.4.tar.xz $ tar -xJvf qt-everywhere-src-5.12.4.tar.xz
CONFIGURE QT
These are the modules I need. I have not tested the skipped modules, so I don't know if the will work.
$ ./configure -v -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=/usr/bin/ -opensource -confirm-license -optimized-qmake -reduce-exports -release -qt-pcre -make libs -prefix /usr/local/qt5 -I/usr/include/firebird -I/usr/include/postgresql -I/opt/vc/include -I/usr/include/xkbcommon -I/usr/include/xcb -I/usr/include/cups -skip wayland -skip qtdoc -skip webengine -skip qtlocation -skip qtwebchannel -skip qt3d -skip qtlocation -skip qtsensors -skip qtconnectivity -skip qtquickcontrols -skip qtserialbus -skip qtserialport -skip qtcanvas3d -skip qtpurchasing -skip qtdatavis3d -skip qtspeech -skip qtcharts -skip qtactiveqt -skip qtquickcontrols -skip qtmacextras -skip qtwinextras -skip qtandroidextras -skip qtwebchannel -skip qtwebengine -skip qtwebview -skip qtquickcontrols2 -skip qtpurchasing -skip qtdatavis3d
COMPILE AND INSTALL ONLY THE NEEDED MODULES
For my developments, at this moment I only need the qtbase, qtmultimedia and qttools modules
Compilation can be very slop in the rpi and using only 1 processor thread.
- IMPORTANT: DUE TO THE LIMITED RAM (1GB) AND ENABLED SWAP SPACE (900MB), USE ONLY 1 CORE FOR COMPILATION, WILL AVOID PROBLEMS AS OVERHEATING AND CRASHES
- IMPORTANT: DUE TO THE LIMITED RAM (1GB) AND ENABLED SWAP SPACE (900MB), USE ONLY 1 CORE FOR COMPILATION, WILL AVOID PROBLEMS AS OVERHEATING AND CRASHES
pi@pipis:~/opt/qt5 $ cd qtbase pi@pipis:~/opt/qt5/qtbase $ ~/opt/qt5/qtbase/bin/qmake $ make $ sudo make install $ cd .. $ cd qtmultimedia $ make $ sudo make install $ cd .. $ cd qttools $ make $ sudo make install
Setup environment
Add to .bashrc
export LD_LIBRARY_PATH=/usr/local/qt5/lib/ export PATH=/usr/local/qt5/bin:$PATH export QTDIR=/usr/local/qt5 export QT_INSTALL_PLUGINS=/usr/local/qt5/plugins