• Home
  • /
  • odroid
  • /
  • Сборка Qt 5.8.1 на плате Odroid XU3/XU4

Сборка Qt 5.8.1 на плате Odroid XU3/XU4

Порядок установки Qt 5.8.1:

1. Создание образа. Берем образ с сайта odroid от 31.07.2017. На более свежем образе возникали проблемы. Используем программу win32diskimager , чтобы записать образ системы на карту памяти (Samsung evo plus 64 GB) или используем MultiWriter для Ubuntu.

Далее можно следовать по инструкции с сайта.

2.Файл подкачки. Для более быстрой компиляции Qt, создаем файлы подкачки размером 512 Mb:

cd /
su

fallocate -l 512M /swapfile1
fallocate -l 512M /swapfile2
fallocate -l 512M /swapfile3
fallocate -l 512M /swapfile4

chmod 0600 /swapfile1
chmod 0600 /swapfile2
chmod 0600 /swapfile3
chmod 0600 /swapfile4

mkswap /swapfile1
mkswap /swapfile2
mkswap /swapfile3
mkswap /swapfile4

swapon /swapfile1
swapon /swapfile2
swapon /swapfile3
swapon /swapfile4
free -m<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1">​</span>

Изменяем fstab, чтобы файлы подкачки были доступны при перезагрузке

sudo pluma /etc/fstab
/swapfile1 none swap sw 0 0
/swapfile2 none swap sw 0 0
/swapfile3 none swap sw 0 0
/swapfile4 none swap sw 0 0

3. Получение библиотек необходимых для сборки Qt5:

sudo apt-get build-dep qt5-default

В зависимости от того , какие модули Qt вам необходимы ставим дополнительные пакеты:

# Build essentials
sudo apt-get install build-essential perl python git
# Libxcb
sudo apt-get install "^libxcb.*" libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev
# Qt WebKit
sudo apt-get install flex bison gperf libicu-dev libxslt-dev ruby
# Qt WebEngine
sudo apt-get install libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libfontconfig1-dev libcap-dev libxtst-dev libpulse-dev libudev-dev libpci-dev libnss3-dev libasound2-dev libxss-dev libegl1-mesa-dev gperf bison 
sudo apt-get install libbz2-dev libgcrypt11-dev libdrm-dev libcups2-dev libatkmm-1.6-dev 
# Qt Multimedia
sudo apt-get install libasound2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev

4. Еще раз проходимся по списку пакетов:

sudo apt-get install build-essential libfontconfig1-dev libdbus-1-dev libfreetype6-dev libicu-dev libsqlite3-dev libssl-dev libpng12-dev libjpeg9-dev libglib2.0-dev
# GStreamer
sudo apt-get install libasound2-dev pulseaudio libpulse-dev libgstreamer0.10-dev libgstreamer-plugins-base1.0-dev
#PostgreSQL, MariaDB/MySQL
sudo apt-get install libpq-dev libmariadbclient-dev
#CUPS
sudo apt-get install libcups2-dev
#Wayland
sudo apt-get install libxkbcommon-dev libwayland-dev

5. Получение исходного кода.

Клонируем репозиторий Qt5:

git clone git://code.qt.io/qt/qt5.git

Проверяем целевую ветку:

cd qt5 
git checkout 5.8

Инициализация выбранного репозитория:

perl init-repository

Используем патч , описанный в ветке форума odroid:

— qtbase/src/platformsupport/eglconvenience/qxlibeglintegration.cpp
2015-08-04 11:24:49.526775461 +0000
+++ qtbase/src/platformsupport/eglconvenience/qxlibeglintegration.cpp.new
2015-08-04 11:19:54.201290514 +0000
@@ -90,6 +90,9 @@
XFree(chosenVisualInfo);
return visualId;
}
+ //hack
+ return visualId;
+ //end hack
int visualRedSize = qPopulationCount(chosenVisualInfo->red_mask);
int visualGreenSize = qPopulationCount(chosenVisualInfo->green_mask);

6. Изменяем qmake.conf для настройки под плату Odroid XU3/XU4.
Файл /qtbase/mkspecs/linux-g++/qmake.conf должен выглядеть следующим образом:

#
# qmake configuration for linux-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

#QMAKE_INCDIR += /usr/include
#QMAKE_LIBDIR += /usr/lib

#QMAKE_INCDIR_OPENGL = /usr/include/GL
#QMAKE_LIBDIR_OPENGL = /usr/lib/arm-linux-gnueabihf/mesa
QMAKE_INCDIR_EGL        = /usr/include/EGL
QMAKE_LIBDIR_EGL        = /usr/lib/arm-linux-gnueabihf
QMAKE_INCDIR_OPENGL_ES2 = /usr/include/GLES2
QMAKE_LIBDIR_OPENGL_ES2 = /usr/lib/arm-linux-gnueabihf/
#QMAKE_INCDIR_OPENVG    = $QMAKE_INCDIR_EGL
#QMAKE_LIBDIR_OPENVG    = /usr/lib/arm-linux-gnueabihf/mali-egl

QMAKE_LIBS_EGL += -lEGL
#QMKAE_LIBS_GL  += -lGL
QMAKE_LIBS_OPENGL_ES2 += -lGLESv2 -lEGL

#QMAKE_LFLAGS += -Wl,-rpath-link,/usr/lib/arm-linux-gnueabihf

QMAKE_CFLAGS   +=  -mcpu=cortex-a15 -mfpu=neon-vfpv4 -mtune=cortex-a15.cortex-a7  -mfloat-abi=hard
QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
QMAKE_CFLAGS_RELEASE   +=  -mcpu=cortex-a15 -mfpu=neon-vfpv4 -mtune=cortex-a15.cortex-a7 -mfloat-abi=hard
DISTRO_OPTS += "hard-float"
QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CXXFLAGS -O2

QT_INSTALL_PREFIX="/mnt/tah/build/qt5/"  ## Edit this if you have a preference
# Preferred eglfs backend
EGLFS_DEVICE_INTEGRATION = eglfs_linuxfb
load(qt_config)

7. Конфигурирование Qt5:

./configure -prefix "/mnt/tah/build/qt5/" -release -confirm-license -opensource -platform linux-g++ -opengl es2 -no-pch -qt-pcre -cups -system-xcb -system-sqlite -nomake tests -nomake examples -no-kms -skip qtwebengine -gstreamer 1.0 -no-warnings-are-errors

Внимательно смотрим на выход команды, ошибок быть не должно.

Если же что-то пошло не так и появились ошибки при конфигурировании, то используем команду:

git submodule foreach --recursive 'git clean -dfx'

Если необходима сборка Qt в статику, то добавляем -static , однако мои попытки собрать Qt заканчивались ошибками.

./configure -prefix "/mnt/tah/build/qt5-static/" -release -static -confirm-license -opensource -platform linux-g++ -opengl es2 -no-pch -qt-pcre -cups -system-xcb -system-sqlite -nomake tests -nomake examples -no-kms -skip qtwebengine -gstreamer 1.0 -no-warnings-are-errors

8. Компиляция Qt5.
Для распараллеливания компиляция на 4 ядра , используем ключ -j4:

make -j4

Сборка у меня заняла порядка 4 часов, далее выполняем установку:

sudo make install

9. Настриваем qmake.
Скорее всего при вводе qmake -v вы увидите следующую ошибку:
could not exec usr/lib/…/qmake.
Заходим в папку usr/lib/arm-linux-gnueabihf/qtchooser/ С помощью pluma cоздаём там файл default.conf ,где прописываем следующее:

mnt/tah/build/qt5/bin 
mnt/tah/build/qt5/lib

Теперь при вводе qmake -v вы должны будете увидеть следующее:

QMake version 3.1 
Using QT version 5.8.1 in mnt/tah/build/qt5/lib

10. Установка QtCreator.

Скачиваем QtCreator в папку mnt/tah/build/qt-creator:

git clone --recursive https://code.qt.io/qt-creator/qt-creator.git

Устанавливаем патч по ссылке. Однако есть альтернативный способ изменения файлов botan.cpp и botan.h.
Затем проделываем следующие операции в папке build:

mkdir qt-creator-build
cd qt-creator-build 
qmake -r ../qt-creator/qtcreator.pro 
make -j4

Сборка Qt 5.8.1 на плате Odroid XU3/XU4