If You want to build Qt5 development environmet for raspberry pi then you are in the right place. In this short tutorial you can build your Qt5 for raspberry pi. I used ubuntu-18.04-desktop-amd64 and rasp image is 2018-06-27-raspbian-stretch. For old images something can be different. If you have any trouble, then let me know I can help you.

Qt is a framework. What is framework ? Framework is a platform which includes several tools that makes your life easier. For example GUI libraries of Qt. They are best for me. One much more thing: you develop applications with C++ in Qt. ( Qt is cute not quti )

You can develop Qt applications for different hardware architectures. For raspberry pi we create a virtual machine ( host ) and we compile our projecst crossly. I just try to say we must make a cross compilation. As it is obvious our host hardware is (most probably) intel but the raspberry pi is ARM. They are totally different. Like white and black or Brad and Angelina. So to make understandable (?) what we do in intel, we cross compile our code then it will be ok for Rasp. To do that we need some toolchains that we will install in our virtual machine.

First thing first, lets create a virtual machine with virtual box. You can download virtual box from here https://www.virtualbox.org/wiki/Downloads

Then follow instruction in the video. Give about 30 GB space , it is enough. Then open it.
Before go raspberry pi, be sure that , you supply the raspberry pi 5V 2.1A power source or much current. If you suppy it from your computer or you phone charger , then you will waste your hours in the next. If rasp is connected to the HDMI and you see the yellow lightning figure for a long time then you will have a power problem. If you have a problems with power do not go further ! Power be with you ! )

Now go to raspberry pi. Make it ssh available, ( create a directory which name is ssh in the boot directory with cmd.exe) log in with ssh. With putty ( you can use different serial terminal/emulator ) log in, User name is pi, passwd raspberry. Now change the root passwd and enable to login as a root.

sudo nano /etc/ssh/sshd_config

find the line PermitRootLogin and make it comment out.

then say yes

PermitRootLogin yes

to out ctrl -x and push the y

then give root password.

sudo passwd root
(mine is 1234)
sudo reboot

login as a root. User name is “root” and paswwd is “what you give”

Then,

nano /etc/apt/sources.list
uncomment the last line. apt-get update
apt-get dist-upgrade
reboot
rpi-update
reboot
-be sure rpi update work, try rpi-update again
*** Your firmware is already up to date – OKAY
sudo apt-get build-dep qt5-qmake
sudo apt-get build-dep libqt5webengine-data
sudo apt-get install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0
mkdir /usr/local/qt5pi
chown -R root:root /usr/local/qt5pi

That is ok for Raspberr pi. Do not power off it. We have a long night…


In ubuntu :
We create the vm open it, ( for network connect it via ethernet cable. I did it like that I did not have to make any additional configuration, I did not use Wifi. Create a good network with cables between your raspberry pi and computer. )

sudo passwd root

su

apt-get update

apt-get -y upgrade

apt-get install gcc git bison python gperf pkg-config

sudo mkdir /opt/qt5pi

sudo chown 1000:1000 /opt/qt5pi

cd /opt/qt5pi

git clone https://github.com/raspberrypi/tools

nano ~/.bashrc – it keep to long

export PATH=$PATH:/opt/qt5pi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

reboot

wget http://download.qt.io/official_releases/qt/5.10/5.10.1/single/qt-everywhere-src-5.10.1.tar.xz

tar xf qt-everywhere-src-5.10.1.tar.xz
cp -R qt-everywhere-src-5.10.1/qtbase/mkspecs/linux-arm-gnueabi-g++ qt-everywhere-src-5.10.1/qtbase/mkspecs/linux-arm-gnueabihf-g++

sed -i -e \’s/arm-linux-gnueabi-/arm-linux-gnueabihf-/g\’ qt-everywhere-src-5.10.1/qtbase/mkspecs/linux-arm-gnueabihf-g++/qmake.conf

mkdir sysroot sysroot/usr sysroot/opt

rsync -avz root@192.168.16.25:/lib sysroot

rsync -avz root@192.168.16.25:/usr/include sysroot/usr

rsync -avz root@192.168.16.25:/usr/lib sysroot/usr

rsync -avz root@192.168.16.25:/opt/vc sysroot/opt

mv sysroot/usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0 sysroot/usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0_backup

ln -s sysroot/opt/vc/lib/libEGL.so sysroot/usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0

mv sysroot/usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0 sysroot/usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0_backup

ln -s sysroot/opt/vc/lib/libGLESv2.so sysroot/usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0

ln -s sysroot/opt/vc/lib/libEGL.so sysroot/opt/vc/lib/libEGL.so.1

ln -s sysroot/opt/vc/lib/libGLESv2.so sysroot/opt/vc/lib/libGLESv2.so.2

wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py

chmod +x sysroot-relativelinks.py

./sysroot-relativelinks.py sysroot

check syncronized file again

rsync -avz root@192.168.16.25:/lib sysroot

rsync -avz root@192.168.16.25:/usr/include sysroot/usr

rsync -avz root@192.168.16.25:/usr/lib sysroot/usr

rsync -avz root@192.168.16.25:/opt/vc sysroot/opt

./sysroot-relativelinks.py sysroot

mkdir qt5build

cd qt5build

../qt-everywhere-src-5.10.1/configure -opengl es2 -device linux-rasp-pi3-g++ -device-option CROSS_COMPILE=arm-linux-gnueabihf- -sysroot /opt/qt5pi/sysroot -prefix /usr/local/qt5pi -opensource -confirm-license -skip qtscript -nomake examples -make libs -pkg-config -no-use-gold-linker -v


=> for raspberry pi 0 => -device linux-rasp-pi-g++

=> for raspberry pi 2 => -device linux-rasp-pi2-g++

=> for raspberry pi 3 => -device linux-rasp-pi3-g++

=> for raspberry pi 3 + vc4 driver => -device linux-rasp-pi3-vc4-g++

make -j4

make install

cd /opt/qt5pi

rsync -avz sysroot/usr/local/qt5pi root@192.168.16.25:/usr/local



install qt-creator

apt-get install qtcreator

Lets create simple Hello world console application. With qt-creator choose new console application.

//main.cpp
#include <QCoreApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    qDebug()<<"Hello World"<<endl;

    return a.exec();
}
//untitled.pro
QT -= gui

CONFIG += c++11 console
CONFIG -= app_bundle

# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += main.cpp

Go to path where your pro file stays.
Call the qmake with command
/opt/qt5pi/sysroot/usr/local/qt5pi/bin/qmake
then hit enter after that you will see the Makefile . Check with the ls command
to create a executable binary just
make
As it seen with file untitled, it is for ARM not intel.
Send it to the raspberr pi with
scp untitled root@192.168.16.25:/home
Back to raspberry pi. Go to home. Then ./untitled.
Hello World.

28/06/2018

Leave a Comment

Your email address will not be published. Required fields are marked *