Собирать Qt для BeagleBone Black будем на ОС Ubuntu 16.04 amd64 с системой кросскомпиляции Linaro Linux x86_64 4.9.
1. Скачиваем стабильную старую версию кросскомпилятора Linaro Linux i686 arm little endianess 4.9. Создаем папку sudo mkdir -p /usr/local/tools/linaro-4.9. Распаковываем файлы в указанную папку (например простым копированием из архива с помощью mc). Если нет mc, ставим его с помощью sudo apt-get install mc. Вызываем mc с правами суперпользователя sudo mc, чтобы беспрепятственно копировать в /usr/local/tools/linaro-4.9.
Добавляем путь к бинарникам в общий путь поиска системы. Редактируем файл ~/.bashrc ( nano ~/.bashrc ). Добавляем в конец строку export PATH=$PATH:/usr/local/tools/linaro-4.9/bin. Теперь команда echo $PATH, вызванная для нового экземпляра терминала (gnome-terminal) должна включать /usr/local/tools/linaro-gnueabihf-4.9/bin.
2. Скачиваем версию qt 4.8.6 отсюда и распаковываем в определенную папку для сборки (у меня папка /media/Data/Libraries/bbb/qt_4.8.6_linaro4.9) и копируем в неё содержимое архива с помощью mc.
В проекте нет стандартных настроек для системы кросскомпиляции Linaro, поэтому надо будет создать файлы настроек. Переходим в папку mkspecs/qws, создаем папку и копируем файлы настроек:
cd /media/Data/Libraries/bbb/qt_4.8.6_linaro4.9/mkspecs/qws
mkdir linux-arm-linaro-g++
cp linux-arm-g++/qmake.conf ./linux-arm-linaro-g++
cp linux-arm-g++/qplatformdefs.h ./linux-arm-linaro-g++
Редактируем файл настроек nano ./linux-arm-linaro-g++/qmake.conf в соответствии с используемым средством кросскомпиляции /usr/local/tools/linaro-gnueabihf-4.9 :
1. Скачиваем стабильную старую версию кросскомпилятора Linaro Linux i686 arm little endianess 4.9. Создаем папку sudo mkdir -p /usr/local/tools/linaro-4.9. Распаковываем файлы в указанную папку (например простым копированием из архива с помощью mc). Если нет mc, ставим его с помощью sudo apt-get install mc. Вызываем mc с правами суперпользователя sudo mc, чтобы беспрепятственно копировать в /usr/local/tools/linaro-4.9.
Добавляем путь к бинарникам в общий путь поиска системы. Редактируем файл ~/.bashrc ( nano ~/.bashrc ). Добавляем в конец строку export PATH=$PATH:/usr/local/tools/linaro-4.9/bin. Теперь команда echo $PATH, вызванная для нового экземпляра терминала (gnome-terminal) должна включать /usr/local/tools/linaro-gnueabihf-4.9/bin.
2. Скачиваем версию qt 4.8.6 отсюда и распаковываем в определенную папку для сборки (у меня папка /media/Data/Libraries/bbb/qt_4.8.6_linaro4.9) и копируем в неё содержимое архива с помощью mc.
В проекте нет стандартных настроек для системы кросскомпиляции Linaro, поэтому надо будет создать файлы настроек. Переходим в папку mkspecs/qws, создаем папку и копируем файлы настроек:
cd /media/Data/Libraries/bbb/qt_4.8.6_linaro4.9/mkspecs/qws
mkdir linux-arm-linaro-g++
cp linux-arm-g++/qmake.conf ./linux-arm-linaro-g++
cp linux-arm-g++/qplatformdefs.h ./linux-arm-linaro-g++
Редактируем файл настроек nano ./linux-arm-linaro-g++/qmake.conf в соответствии с используемым средством кросскомпиляции /usr/local/tools/linaro-gnueabihf-4.9 :
#
# qmake configuration for building with linux-arm-linaro-g++
#
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)
#Compiler Flags to take advantage of the ARM architecture
QMAKE_CFLAGS_RELEASE = -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=hard
QMAKE_CXXFLAGS_RELEASE = -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=hard
# modifications to g++.conf
QMAKE_CC = arm-linux-gnueabihf-gcc
QMAKE_CXX = arm-linux-gnueabihf-g++
QMAKE_LINK = arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB = arm-linux-gnueabihf-g++
# modifications to linux.conf
QMAKE_AR = arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = arm-linux-gnueabihf-objcopy
QMAKE_STRIP = arm-linux-gnueabihf-strip
load(qt_config)
# qmake configuration for building with linux-arm-linaro-g++
#
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)
#Compiler Flags to take advantage of the ARM architecture
QMAKE_CFLAGS_RELEASE = -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=hard
QMAKE_CXXFLAGS_RELEASE = -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=hard
# modifications to g++.conf
QMAKE_CC = arm-linux-gnueabihf-gcc
QMAKE_CXX = arm-linux-gnueabihf-g++
QMAKE_LINK = arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB = arm-linux-gnueabihf-g++
# modifications to linux.conf
QMAKE_AR = arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = arm-linux-gnueabihf-objcopy
QMAKE_STRIP = arm-linux-gnueabihf-strip
load(qt_config)
Собираем qt 4.8.6:
cd /media/Data/Libraries/bbb/qt_4.8.6_linaro4.9
make confclean
./configure -v -embedded arm -platform qws/linux-x86_64-g++ -xplatform qws/linux-arm-linaro-g++ -prefix /usr/local/tools/qt_4.8.6_linaro4.9 -little-endian -qt-gfx-transformed -static -confirm-license -opensource -no-accessibility -no-largefile -fast -no-phonon -no-phonon-backend -qt-zlib -no-qt3support -no-openssl -no-webkit -qt-sql-sqlite -no-dbus -nomake demos -nomake examples -nomake docs
make
sudo make install
При сборке проекта с использованием тулчейна linaro(/usr/local/tools/linaro-4.9) и qt-4.8.6 (/usr/local/tools/qt_4.8.6_linaro4.9) у меня возникает ошибка: компилятор не находит заголовочный файл <QtDesigner/QDesignerCustomWidgetInterface>. Это произошло потому, что операция sudo make install не перекинула файлы дизайнера в установочную папку, надо сделать это за неё. Переписываем папки:
make confclean
./configure -v -embedded arm -platform qws/linux-x86_64-g++ -xplatform qws/linux-arm-linaro-g++ -prefix /usr/local/tools/qt_4.8.6_linaro4.9 -little-endian -qt-gfx-transformed -static -confirm-license -opensource -no-accessibility -no-largefile -fast -no-phonon -no-phonon-backend -qt-zlib -no-qt3support -no-openssl -no-webkit -qt-sql-sqlite -no-dbus -nomake demos -nomake examples -nomake docs
make
sudo make install
1) /media/Data/Libraries/bbb/qt_4.8.6_linaro4.9/include/QtDesigner -> /usr/local/tools/qt_4.8.6_linaro4.9/include/QtDesigner
2) /media/Data/Libraries/bbb/qt_4.8.6_linaro4.9/tools/designer -> /usr/local/tools/qt_4.8.6_linaro4.9/tools/designer
И всё корректно собирается.
Использованные статьи:
1) http://www.riuson.com/blog/post/bb-qt-tslib
2) https://stackoverflow.com/questions/9229079/qt-compile-error-when-use-tslib-with-angstrom-g
3) https://wiki.qt.io/Building_Qt_for_Embedded_Linux
4) http://derekmolloy.ie/beaglebone/qt-with-embedded-linux-on-the-beaglebone/
5) https://chaitramohankumar.wordpress.com/2014/08/13/building-qt4-8-6-for-embedded-linux
Qt Creator Kits:
1) https://doc.qt.io/qtcreator/creator-targets.html
2) Qt Creator Kit Setup https://www.youtube.com/watch?v=eZ-HOc2P_EI
Использованные статьи:
1) http://www.riuson.com/blog/post/bb-qt-tslib
2) https://stackoverflow.com/questions/9229079/qt-compile-error-when-use-tslib-with-angstrom-g
3) https://wiki.qt.io/Building_Qt_for_Embedded_Linux
4) http://derekmolloy.ie/beaglebone/qt-with-embedded-linux-on-the-beaglebone/
5) https://chaitramohankumar.wordpress.com/2014/08/13/building-qt4-8-6-for-embedded-linux
Qt Creator Kits:
1) https://doc.qt.io/qtcreator/creator-targets.html
2) Qt Creator Kit Setup https://www.youtube.com/watch?v=eZ-HOc2P_EI