Jump to content

Native compile Qt 5.12.3 and 5.12.4 in Raspberry pi 3 Model B+

From Qt Wiki

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
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
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