Как да компилирам Qt5 dev разклонение от git хранилище за Raspberry Pi?

Има няколко урока в мрежата, които обясняват как да компилираме Qt5 за Raspberry Pi. За съжаление всички те са малко остарели. Обикновено човек получава „недефинирани препратки“ за някои GLIBC функции. Този въпрос и отговор обясняват как да създадете актуален (март 2015 г.) кръстосан компилатор на gcc: Как мога да създам модерна верига от инструменти за кръстосано компилиране за Raspberry Pi 1?

И този въпрос и отговор обяснява какво трябва да се направи, за да се подготви самият Raspbian да бъде използван от този компилатор: Как да подготвя Raspberry Pi с Raspbian, за да мога да компилирам Qt5 програми от Linux хост?

Но как се компилира самият Qt5?


person Greenflow    schedule 11.05.2015    source източник


Отговори (1)


За да създадете Qt5 за Raspberry Pi, са необходими няколко стъпки:

Вземете източниците на Qt5 от git. За да платите Qt5:

git клонинг http://code.qt.io/cgit/qt/qt5.git

or

git клонинг http://code.qt.io/qt/qt5.git

Хранилището може да се променя от време на време. Проектът qt все още се развива.

Горната команда е изпълнена на хоста на Linux. За да получите cd на клона на разработчиците до qt5 и:

git checkout dev

следван от

./initRepository

Това ще отнеме доста време. През това време основната папка на Raspberry Pi може да бъде монтирана. Има възможност за използване на четец на карти и монтиране на SD картата. Много по-добро решение е да използвате или nfs, samba, sshfs за монтиране на доживотен Raspberry Pi. По този начин незначителни грешки, напр. липсващи пакети за разработка, лесно се коригират „в движение“.

Използвам sshfs:

sshfs pi@raspberrypi:/ /home/me/rasp

Ако това монтиране е успешно, основната файлова система на Raspberry Pi е достъпна под /home/me/rasp.

Веднага след като Qt5 бъде изваден, трябва да се направят следните промени: В qt5/qtbase/mkspecs файлът linux-arm-gnueabi-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)

# modifications to g++.conf
QMAKE_CC                = <path to>/arm-linux-gnueabihf-gcc
QMAKE_CXX               = <path to>/arm-linux-gnueabihf-g++
QMAKE_LINK              = <path to>/arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB        = <path to>/arm-linux-gnueabihf-g++

# modifications to linux.conf
QMAKE_AR                = <path to>/arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY           = <path to>/arm-linux-gnueabihf-objcopy
QMAKE_NM                = <path to>/arm-linux-gnueabihf-nm -P
QMAKE_STRIP             = <path to>/arm-linux-gnueabihf-strip


QMAKE_INCDIR_EGL        = $$[QT_SYSROOT]/opt/vc/include/EGL/
QMAKE_INCDIR_OPENGL_ES2 = $$[QT_SYSROOT]/opt/vc/include/GLES2/
QMAKE_INCDIR_OPENVG     = $$[QT_SYSROOT]/opt/vc/include/VG/  

QMAKE_LIBDIR_EGL        = $$[QT_SYSROOT]/opt/vc/lib/
QMAKE_LIBDIR_OPENGL_ES2 = $$[QT_SYSROOT]/opt/vc/lib/
QMAKE_LIBDIR_OPENVG     = $$[QT_SYSROOT]/opt/vc/lib/

QMAKE_LIBS_EGL          = -lEGL -lGLESv2                       
QMAKE_LIBS_OPENVG       = -lOpenVG -lEGL -lGLESv2         
QMAKE_LIBS_OPENGL_ES2   = -lEGL -lGLESv2

LIBS  += -L$$[QT_SYSROOT]/opt/vc/lib -lvcos -lbcm_host -lvchiq_arm 
LIBS  += -lEGL -lGLESv2 

INCLUDEPATH  += $$[QT_SYSROOT]/opt/vc/include 
INCLUDEPATH  += $$[QT_SYSROOT]/opt/vc/include/interface/vcos 

INCLUDEPATH  += $$[QT_SYSROOT]/opt/vc/include/interface/vcos/pthreads 
INCLUDEPATH  += $$[QT_SYSROOT]/opt/vc/include/interface/vmcs_host/linux

‹path to› трябва да бъде заменен с кръстосания компилатор, който е създаден според: Как мога да създам модерна верига от инструменти за кръстосано компилиране за Raspberry Pi 1?

Следващата стъпка е да конфигурирате Qt5:

   ./configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=<path to>/arm-linux-gnueabihf- -xplatform linux-arm-gnueabi-g++ -sysroot /home/me/rasp -opensource -confirm-license -optimized-qmake  -release -make libs -prefix /usr/local/qt5pi -v -libinput -linuxfb -directfb -xcb  -fontconfig -ts
   lib -evdev -iconv -xinput2 -xkbcommon-evdev -eglfs -icu -qt-pcre -lpthread  -system-sqlite -no-sql-sqlite2 -gstreamer 1.0 -reduce-exports

Специално внимание трябва да се обърне на следните параметри:

  1. -xplatform linux-arm-gnueabi-g++ Това е mkspec. Променете името съответно, ако linux-arm-gnueabi-g++ не е редактиран, но е създаден нов mkspec.

  2. -device-option CROSS_COMPILE=‹path to›/arm-linux-gnueabihf- Не съм сигурен дали това е необходимо. Намерих го в някои уроци. Всичко работеше добре и без тази опция. Коригирайте ‹path to› към кръстосания компилатор точно както в mkspec.

  3. -sysroot /home/me/rasp Много важно. Точката на монтиране, където е монтиран Raspberry Pi.

  4. -префикс /usr/local/qt5pi Където Qt5 трябва да бъде инсталиран на RPi

Сега всичко, което трябва да направите, е обичайното: make/make install. Командата изгражда Qt5 и го инсталира в /usr/qt5pi на Raspberry Pi. Уверете се, че за това местоположение съществуват подходящи разрешения за запис.

Още нещо:

qtwayland/src/hardwareintegration/client/brcm-egl/qwaylandbrcmeglintegration.h

съдържаше грешка, когато компилирах моя qt5. Бързо решение е да редактирате този файл:

#include <QtWaylandClient/private/qwaylandclientbufferintegration_p.h>

#include <wayland-client.h> <--- add this below the #include above.

Едно последно нещо: този qt5 НЕ е подходящ за използване от самия Raspberry Pi. Когато се създават програми, RPi трябва да бъде монтиран и компилирането трябва да се извърши под същия хост със същия кръстосан компилатор, на който е компилиран Qt5.

Още едно последно нещо: RPi не поддържа xcb. Така че пренасочването на X11 не е възможно.

РЕДАКТИРАНЕ: Казаха ми, че това не е вярно. Не, не е. Вярно е обаче, че RPi не поддържа xcb/X11 за програми, които използват OpenGL. Така че няма програми qtquick 2: http://lists.qt-project.org/pipermail/qtonpi/2012-October/001087.html

Нищо не може да се направи по въпроса в момента, неговият графичен драйвер просто не го поддържа. Поддръжката на Wayland е ограничена. Най-добрата платформа за използване е eglfs.

person Greenflow    schedule 11.05.2015
comment
Ръководството е почти пълно, но тук-там съдържа грешна информация. - person peppe; 12.05.2015
comment
Няма абсолютно никаква нужда да променяте mkspecs. Доставените с 5.3+ са добри. Просто се уверете, че сте предали правилните пътища на компилатора към -device-option. - person peppe; 12.05.2015
comment
Може да е излишно да се компилира ВСИЧКИ Qt, също така е възможно просто да се компилират модулите, от които се нуждаете. - person peppe; 12.05.2015
comment
X11 работи на RPi, така че защо да казваме, че не работи? Обърнете внимание как вашият команден ред за конфигуриране изисква поддръжка на XCB. - person peppe; 12.05.2015
comment
Вашият sshfs трик (липса на подходящ sysroot) е чист, но 1) ще забави компилацията много. Нуждаете се също от фиктивни шифри, за да избегнете претоварване на процесора на RPi. Освен това добавете ограничената честотна лента на мрежата върху него. 2) изисква transform_symlinks или всяка абсолютна символна връзка на RPi ще сочи към несъществуващи файлове на вашия хост. - person peppe; 12.05.2015
comment
@pepe, това работи при мен. И mkspecs не са добри за Raspberry Pi. Както можете да видите, добавих всички видове LIBS и QMAKE променливи към mkspec. Добавих и правилната -device-option... не работи. Моят компилатор не беше намерен без хака в тази mkspec. Не казвам, горният урок е перфектен. Обикновено има повече от едно възможно решение. Това е повече или по-малко резултат от няколко дни пробен период и в момента не ми се струва нищо. - person Greenflow; 12.05.2015
comment
X11 работи на RPi, така че защо да казваме, че не работи? И да, и не. Прав си, трябва да преформулирам това. X11 работи на RPi, но за много случаи на употреба е абсолютно безполезен. Не работи за програми, които използват OpenGL: lists.qt -project.org/pipermail/qtonpi/2012-October/001087.html Това означава: Без qtquick 2 на RPi, използващ X11. - person Greenflow; 12.05.2015
comment
transform_symlinks Споменах това в предишната част на урока: stackoverflow.com/questions/30120871 / Също така: Вероятно други начини за справяне с това, но аз използвам Qt5 на RPi от доста време и все още не виждам никакви недостатъци. - person Greenflow; 12.05.2015
comment
'sshfs' е бавен... Да и не... Все още виждам хора да компилират qt5 на техния RPi, тъй като не знаят как да настроят среда за кръстосано компилиране. В сравнение с тях sshsf методът е светкавично бърз. Моят qt5 беше компилиран за 6 часа. Прочетох около 38 часа, когато се компилира първоначално на овърклокнат RPi. - person Greenflow; 12.05.2015
comment
Между другото... такъв урок трябва да е в процес на работа. Ако искате да го подобрите.... :-) Btw2... мислите ли, че nfs или samba са по-бързи от sshfs? Както писах, на теория можете просто да монтирате SD картата, но предпочитам да имам моя RPi „живот“, напр. за бързо коригиране на път или липсващ пакет. - person Greenflow; 12.05.2015