Одним из инструментов для создания приложений с графическим пользовательским интерфейсом является хорошо известный фреймворк Qt. Кроссплатформенность Qt позволяет нам успешно использовать его в том числе и для разработки на Raspberry Pi. Но здесь есть один нюанс, о котором мы и поговорим в этой статье.
В принципе, можно без проблем установить Qt Creator и сопутствующие библиотеки непосредственно на Raspberry. И, соответственно, на самой же плате и заниматься разработкой. Но! Компиляция требует достаточно серьезных мощностей, в связи с чем этот процесс на Raspberry будет занимать довольно продолжительное время, что, естественно, нежелательно.
Решение данной проблемы такое - разработка и дальнейшая компиляция выполняются на ПК, а уже готовое приложение загружается и используется на Raspberry Pi. Для реализации этого нам нужно будет кросс-компилировать Qt на хосте (ПК), чтобы затем можно было разворачивать и отлаживать приложения уже на плате. Итак, в отправной точке у нас в наличии:

- Raspberry Pi 4 с установленной Raspberry Pi OS.
- Хост - ПК с ОС Ubuntu 20.04 (моя версия на момент написания статьи).
- Подключение по SSH.
В дальнейшем часть команд будут выполняться на ПК, а часть - на Raspberry Pi, поэтому во избежание путаницы для каждой команды и каждого шага будем добавлять наглядные метки: [PC] или [Raspberry Pi].
Кросс-компиляция Qt.
Шаг 1. [Raspberry Pi]
Произведем необходимые настройки:
sudo raspi-config
Первым делом включаем поддержку OpenGL driver with fake KMS. Для этого переходим в Advanced Options - GL Driver:

И второй момент - настраиваем Raspberry Pi OS на загрузку без запуска графической оболочки. Идем в System Options - Boot / Auto Login:

Шаг 2. [Raspberry Pi]
Редактируем файл /etc/apt/sources.list, например, при помощи редактора nano:
sudo nano /etc/apt/sources.list
Нашей целью здесь является раскомментирование строки:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
Шаг 3. [Raspberry Pi]
Обновляем систему и устанавливаем необходимые пакеты:
sudo apt-get update sudo apt-get upgrade sudo apt-get build-dep qt5-qmake sudo apt-get build-dep libqt5gui5 sudo apt-get build-dep libqt5webengine-data sudo apt-get build-dep libqt5webkit5 sudo apt-get install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 gdbserver pkg-config mesa-utils libgles2-mesa-dev libdrm.dev libgbm.dev
Шаг 4. [Raspberry Pi]
Создаем на Raspberry Pi папку для пользователя pi для дальнейшего развертывания в ней Qt:
sudo mkdir /usr/local/qt sudo chown pi:pi /usr/local/qt
Шаг 5. [PC]
Теперь создаем папку на хосте и скачиваем тулчейн для кросс-компиляции:
mkdir ~/raspberrypi cd ~/raspberrypi wget https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz tar xf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
У меня 64-битная ОС, соответственно, версия - x86_64.
Шаг 6. [PC]
Создаем sysroot для кросс-компиляции под Raspberry Pi:
mkdir sysroot sysroot/usr sysroot/opt
Шаг 7. [PC]
Синхронизируем sysroot на ПК с Raspberry Pi:
rsync -avz pi@192.168.0.101:/lib sysroot rsync -avz pi@192.168.0.101:/usr/include sysroot/usr rsync -avz pi@192.168.0.101:/usr/