Настройка qt creator linux для arm

Обновлено: 03.07.2024

Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal

Май 5, 2020

В связи с этой вирусной хренью у меня сейчас высвободилось какое-то количество свободного времени, которое я решил посвятить ревизии текущих проектов и документации. Гайд по сабж, написанный моим сотрудником полгода назад, безнадежно устарел за это время, поэтому решил его освежить. Ну а бонусом, выкинуть это в паблик - не срачами же едиными. Надеюсь, кому-то эта информация окажется полезной и через гугл этот гайд спасет ему какое-то количество времени.

Собирать будем на примере ARM linux, i-mx6. Host - ubuntu linux. Информацию я попытался предоставить таким образом, чтобы объяснить суть процесса, а не сделать очередной обезьяний рецепт для копирования. Местами ну уж очень для новичков - но лучше пусть обзор будет полным, чем потом тридцать раз дополнять.

Для Qt необходимы одновременно C компилятор и С++ компилятор. К счастью, наконец это не приходится делать сбором из исходников и конфигурирования, либо использовать третьесортные репозитории. Все уже завезли в apt:

apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf

gcc - Си компилятор, g++ - соответственно С++
linux-gnu - обозначает сборку для выполнимых файлов в среде GNU/Linux. Для baremetall нужны пакеты с корнем none
hf - hardfloat. Скорее всего ваш application процессор будет именно таким.

В принципе все. Для windows пользователей необходимо страдать скачать/собрать аналогичный пакет на базе mingw.

2. Сборка Qt

Для кросс-компиляции исходники Qt необходимо пересобрать под целевую платформу.

Самый сложный этап в сборке это конфигурирование. В общем виде основные параметры конфигурирования выглядят так:

./configure <тип линковки> <рецепт> <настройки рецепта> <каталог установки> <лицензия> <тип сборки> <что пропустить> <тонкая настройка>

тип линковки - shared, static. Про статическую линковку и авторские права еще в двух словах чуть ниже.

рецепт. В общем случае это набор базовых правил для кросс-компиляции. Если используется ключевое слово xplatform, рецепты находятся по адресу /qtbase/mkspecs. Для device - /qtbase/mkspecs/devices. Чем еще отличаются эти два ключевых слова, я так и не понял.

настройки рецепта. Фактически это передача определенных DEFINE в рецепт. В большинстве случаев кросс-компиляции потребуется, как минимум, передать префикс имени компилятора - чтобы одновременно были доступны компиляторы под разные платформы, в системе кросс-компиляторам назначается дополнительный префикс. Например, наш компилятор под arm будет не просто gcc, a arm-linux-gnueabihf-gcc. Задается через device_option (даже если рецепт указан через xplatform). Соответственно, необходимо передать -device-option CROSS_COMPILE=arm-linux-g nueabihf-.

каталог установки. Куда будет производиться установка. Некоторые говорят, что необходимо монтировать файловую систему удаленной машины в этот каталог. По моему мнению этот шаг лишний - монтирование вообще никак не влияло на выходные файлы и компиляцию. Так что просто выходной каталог. При динамической линковке выходные библиотеки (/usr/local/) необходимо скопировать на целевую машину. Если указано device, то задается через ключевое слово sysroot. А если xplatform - prefix. Это невозможно понять, нужно просто запомнить.

лицензия. Тут все просто - если вы купили коммерческую лицензию, у вас есть саппорт и данный гайд вам не нужен. Во всех остальных случаях указывайте -opensource -confirm-license

тип сборки - release, debug, debug-and-release. Я обычно ставлю только релиз.

что пропустить. Задается двумя ключевыми словами - nomake, варианты: libs, examples, tools, tests. И через skip: список пакетов, начинающихся с qt* в каталоге исходников. Я всегда выкидываю исходники и тесты.

тонкая настройка. Задается включением через -feature или выключение через -no-feature. Список с описанием можно получить через -list-features. Если собирается без этого, я не рекомендую лишний раз сюда лезть. Проблемы могут вылезти совершенно в другом месте.

Итого, рабочий набор параметров для сборки qt под arm для версии 5.14.2:

./configure -static -no-opengl -device linux-imx6-g++ -device-option CROSS_COMPILE=arm-linux-gnueabihf- -sysroot

/opt/qt-cross/rootfs-arm -opensource -confirm-license -release -qt-sqlite -nomake examples -nomake tests -skip serialport -skip serialbus -skip quick3d -skip location

make && make install

Чтобы собиралось быстрее, рекомендую запускать make в несколько потоков. Общую рекомендацию где-то видел как кол-во ядер * 2 + 1. Т.е. для 6-ядерного процессора с гипертредингом должно быть:

Все. Можно собирать бинари. Если не используете qt-creator, следующий раздел можно не читать.

Логично было бы после этого собрать версию под windows, чтобы лишний раз не запускать богомерзкую для клиентских релизов. Авотхуй. Сборка безнадежно поломана в 5.14.2. Я уже и i686 и x64 собирал, и свои рецепты писал - бесполезно. Три совершенно разных ошибки. В одних случаях там что-то в libatomic поломали, в других даже внутренняя ошибка компилятора. Потратил кучу времени, не взлетело. А возможно и руки кривые. Забил.

Данный раздел посвящен развертыванию приложений с использованием Qt Creator.

Открываем проект, Инструменты->Параметры.

howto0

Добавить->Обычное Linux устройство. Для развертывания на устройстве нужны ssh, rsync.

howto1

Прописать компилятор для C/C++

howto2

Указать в комплектах путь к собранному qmake

howto3

И все вместе:

Чтобы Qt Creator понимал, какие файлы куда класть, необходимо это указать в .pro файле:

Т.е. кладем выходной бинарь в каталог /home/ubuntu на целевом устройстве. В проектах добавляется целевое устройство, после этого появляется пункт "Развернуть".

Теперь можно собирать кросс-платформенно и развертывать двумя кликами.

4. О статической линковке

В заключении о сабже в комлекте с LGPL. Очень долгое время я считал, что LGPL разрешает только динамическую линковку. Однако это не так и есть официальные разъяснения от FSF:

(1) Если вы статически компонуете с библиотекой под LGPL, вы должны предоставить свое приложение в формате объектного кода (не обязательно исходного текста), с тем чтобы у пользователя была возможность изменить библиотеку и перекомпоновать приложение.

Т.е. по запросу будете обязаны предоставить объектный файл, а не исходный код. Уточню, что запросить объектник у вас может исключительно покупатель вашего продукта, а не абы кто.

Почему я заострил на это внимание? Во-первых у меня возникли проблемы с компиляцией Qt с динамической линковкой - драйверы sql просто отказались подгружаться. Аналогичная проблема (но с чем-то другим, сейчас уже никто не помнит) была у моих ребят, когда они писали предыдущий гайд. Во-вторых, при статической линковке, бинарь будет в разы меньше, чем полный набор библиотек. Для embedded устройств это может быть критично.

Есть один нюанс. Если вдруг каким-то образом в сборке окажется GPL библиотека, придется предоставить весь исходный код.

Подскажите пожалуйста как правильно установить и настроить QTCreator

поставить Linux, можно даже виртуалку попробовать, если доверяешь пробросу USB, поставить тулчейн, поставить QtCreator.

вон из профессии

dib2 ★★★★★ ( 29.01.15 12:07:05 )
Последнее исправление: dib2 29.01.15 12:07:28 (всего исправлений: 1)


Стоит поставить Qt Creator из репозитория Ubuntu на устройстве?


Ну началось, в принципе, я не удивлен, ну да ладно.

поставить тулчейн, поставить QtCreator

А по подробнее, какой тулчейн лучше ставить ?

Стоит поставить Qt Creator из репозитория Ubuntu на устройстве?

Дело в том, что в репозитории не последняя версия Qt, да и хотелось бы под виндой работать а не в эмуляторе, хотя виртуалка стоит, я на ней ядро собираю для платы.

ставь все отдельно, прописывай пути в PATH и сценарии сборки, все должно заработать.


Дело в том, что в репозитории не последняя версия Qt, да и хотелось бы под виндой работать а не в эмуляторе

Версии Qt одна от другой в общем случае отличаются не сильно, если не использовать сверхновые возможности, все будет работать нормально. Потому спокойно ставим криатор на венду. Пишем приложение. Подключаем к венде ардуину, работаем с ее GPIO. Потом переносим на ARM и тестируем, тем более к тому времени версия в репозиториях обновится.


вон из профессии


Чтобы скомпилировать проект на ARM нужно:

1) Проект должен быть чистым, без файла Makefile, без файла user и вообще без каких-либо временных или специфичных для конкретного ПК и его ОС файлов. Подобное достигается использованием систем контроля версии, которые исключают попадание временных файлов с машины на машину. Либо вручную можешь чистить, но медаль за этот бессмысленный труд не дадут.

2) Чтобы собрать проект Qt на ПК с Ubuntu и ARM можно обойтись без Qt Creator. Просто установить g++, build-essential и -dev пакеты для Qt (4 или 5) и выполнить команду qmake, затем make - всё, проект собран.

Помогите с советом или поделитесь опытом уже 3-ю неделю бьюсь с этим вопросом.

Стыдно. Я на полном серьезе не понимаю чем отличается установка Qt Creator на Ubuntu для x86 или arm, сколько раз делал - разницы вообще не заметил. sudo apt-get install qtcreator

Отладка потом, сначала этот шаг, первый.

I-Love-Microsoft ★★★★★ ( 29.01.15 14:19:33 )
Последнее исправление: I-Love-Microsoft 29.01.15 14:23:06 (всего исправлений: 3)

Спасибо всем, кто откликается по существу.

Стыдно. Я на полном серьезе не понимаю чем отличается установка Qt Creator на Ubuntu для x86 или arm, сколько раз делал - разницы вообще не заметил. sudo apt-get install qtcreator

Мне не стыдно спросить, т.к. я с этой темой работаю всего несколько дней, и я знаю ка на Ubuntu поставить пакеты и креатор. Меня интересует, как собрать все это дело под виндой, от какой фирмы лучше взять тулчейн и вообще есть ли разница между разными тулчейнами, как его правильно прописать в креаторе и настроить окружение для всего этого. Теперь для тех, кто не по существу пишет.

Да вы все заебали QuickTime ставить! Выучи, как фреймворк называется

Смотри, тЁлка, а туда же. Начнем переписку грамаррнации и задротов. Всем, кто не по делу пишет - всем в сад.


Меня интересует, как собрать все это дело под виндой, от какой фирмы лучше взять тулчейн и вообще есть ли разница между разными тулчейнами, как его правильно прописать в креаторе и настроить окружение для всего этого.

Ааа. Под виндой и сразу под ARM. Что ж, прошу прощения, я как-то прохлопал эту важную деталь.

Для начала можно посоветовать поставить виртуальную машину с Ubuntu x86 внутри винды - там есть готовые ARM тулчейны прямо в пакетном менеджере. Уверен, шансы собрать программу на Qt для Ubuntu/ARM выше в среде самой Ubuntu x86. Более того, отлаживать программу для Ubuntu ARM проще сделать из Ubuntu x86 а не из винды.

Кроме того, когда собирается программа на Qt она же еще системные библиотеки хочет (а их рядовая программа на Qt хочет не мало под Linux), а стало быть окружение должно быть полноценно.


Добавлю что. если программа падает, то поможет старый добрый GDB в консоли - сразу покажет где чо упало. Можно даже прикрутить крэш-дампер какой-нить и анализировать эти дампы (ну, предварительно потренировавшись на искусственно созданных рукотворных крэшах).

I-Love-Microsoft ★★★★★ ( 29.01.15 16:18:39 )
Последнее исправление: I-Love-Microsoft 29.01.15 16:19:08 (всего исправлений: 1)

стыдно девелоперу метящему в кросс-платформ не осилить Linux за 3 недели и принести это на ЛОР.

Если ты не в курсе, то тулчейнов для сборки под ARM существует

ну так возьми и удосужься узнать, каким тулчейном собрана ОС на твоей железяке, такой же нужен и тебе (apt-cache search в помощь). Телепаты вам не по карману.

Начнем переписку грамаррнации и задротов

в сад здесь идут в первую очередь вантузоиды, неспособные 2 буквы с примера правильно переписать.


Узнавай, как и чем собраны бинари в твоей прошивке, вплоть до libc, скачивай (или собирай) такой же тулчейн под винду, потом кросс-компилируй им Qt, потом цепляй всё это в виндовый Qt Creator и пользуйся.


множество от разных фирм и сообществ, и если ты не в курсе- то это ты ВОН из профессии.

ты какой-то странный
у тебя конкретная железка, для неё есть один конкретный тулчейн, какие ещё множества?


Ставте линукс (хотя бы в виртуалку). Качаете компилятор Arm-None-linux-gnueabi (или CodeSourcery). Качаете qt-everywhere нужной вам версии. С помощью указаного выше компилятора (точнее кросскомпилятора) собираете qt и потом собираете прогу на этом Qt.

Если надо копируете собранные вами библиотеки на устройство.

Теоретически все вышеперечисленное можно сделать и под виндой, но я в инете не натыкался на истории успеха такого мероприятия. (да и вообще, работать с линуксом из под линукса гораздо удобнее).

RiseOfDeath ★★★★ ( 30.01.15 12:10:48 )
Последнее исправление: RiseOfDeath 30.01.15 12:20:42 (всего исправлений: 2)

Разобрался немного со всем этим делом. Посмотрел на железке использовался arm-none-linux-gnueabihf компилятор. Скачал тулчейн от Linaro gcc-linaro-arm-linux-gnueabihf-4.9-2014.09-20140911_win32.exe, установил, прописал в переменные окружения. Скачал автоматический установщик MinGW, отметил что нужно ставить и он сам все скачал, установил, прописал в переменные среды. Аналогично с Python и Perl.

Скачал исходники Qt qt-everywhere-opensource-src-5.4.0.zip, распаковал с папку c:\qt5401. Далее конфигурирую:

Установил компилятор для работы с Arm (g++-arm-linux-gnueabihf, и gcc-multilib, g++-multilib для кроссплатформенной компиляции), настроил Kit'ы для работы с этим компилятором и подключенным устройством - все нормально работает с std c++11. Теперь хочу чтобы c Qt заработало. Мой план такой - скомпилировать Qt, подключить эту версию к существующему Киту, подключить Qt статически к своему проекту и выполнять целевую бинарку на Arm'е.

Буду благодарен за любые ваши указания советы, которые хочу почитать перед началом конфигурации/компиляции/инсталяции, чтобы не наступать на те же грабли.

Qt хочу скомпилировать 5.7

OS хоста Ubuntu 15.10 64bit

на Arm стоит 32 бита Debian GNU/Linux 7

Важно, что никакую графику на Арме выполнять не нужно, по-моему это должно облегчить задачу. Тип проекта будет Qt based console C++

Хороша ли, например, такая кофигурация:

./configure -prefix /home/[myname]/Qt-custom/qt-embedded-5.7 -debug -static -qt-zlib -qt-sql-sqlite2 -no-qml-debug -no-widgets -no-gui -no-opengl -openssl-linked -opensource -confirm-license -silent

? Что еще добавить/убавить? -embedded флаг в пятом вроде уже не действует (?)

На каком этапе нужно будет указать компилятор g++-arm-linux-gnueabihf? На этапе конфигурации или поздней?

Отредактированно: что вписать для опции -platform?

Итак был вопрос, что вписать для флага platform. Оказалось, что все "платформы" лежат в qtbase/mkspecs. Теперь яснен ответ на вопрос "где указать компилятор. Нашел там платформу близкую к нужной мне: linux-arm-gnueabi-g++. Это тоже что и linux-arm-gnueabihf-g++, но без поддрержки плавающих точек. Пошел на хак - скопировал linux-arm-gnueabi-g++ в linux-arm-gnueabihf-g++ и прописал в qmake.conf нужный мне (установленный у меня) компилятор:

Конфиг сработал, но тут новая бяда:

Из любопытства установил g++-arm-linux-gnueabi и выполнил с "легальной" платформой:

(об этом я говорил выше - g++-arm-linux-gnueabi не поддерживает плавающие точки, но даже "легальная" версия просто так не устанавливается

Кстати, нашел рекомендации примерно того, что делал я, но на практике не срабатывает из-за Syntax error: word unexpected (expecting ")") . Попробую покомбинировать флаги

И вот на этой ошибке я и застрял. Syntax error: word unexpected (expecting ")")

Текущая конфигурация, которую пытаюсь запустить:

./configure -prefix /home/rishat/Qt-custom/qt-embedded-5.7 -debug -platform linux-arm-gnueabihf-g++ -qt-zlib -qt-sql-sqlite2 -no-qml-debug -no-widgets -no-gui -no-opengl -openssl-linked -opensource -confirm-license -v

Qt Creator - это кроссплатформенная Qt IDE, которая облегчает разработку и отладку приложений QT. Он также поддерживает удаленную отладку приложений, что очень удобно для портирования приложений QT в Arm. В этой статье в качестве примера будет использоваться am335x ARM от TI, чтобы научить вас настраивать Qt Creator и демонстрацию QT в режиме онлайн отладки. Эта статья является кратким описанием предыдущей работы, теперь поделитесь ей для справки.


    Запустите QtCreator
    Выполните следующую команду для запуска QtCreator Вы можете видеть, что основной интерфейс QTCreator выглядит следующим образом


Вы можете выбрать «About Qt Creator (Q) ..» в меню «Справка», чтобы проверить информацию о версии QTCreator



2.2 Создание устройства QT
Выберите опцию «Устройство» в левой строке меню, а затем нажмите кнопку «Добавить» справа


Выберите «Универсальное устройство Linux» и подтвердите «Мастер запуска»


Настройте информацию об удаленном устройстве и определите следующий шаг


Затем нажмите Finish, QTcreator проверит, доступно ли удаленное устройство


Наконец нажмите «Готово» и «Применить». На этом этапе удаленное устройство добавлено.
2.3 Добавить компилятор
Выберите опцию «Построить и запустить» в левой строке меню, затем выберите опцию компилятора в верхней строке меню и, наконец, нажмите выпадающее меню «Добавить» справа и выберите GCC. Введите имя GCC (определенное вами) в поле имени ниже
Введите путь к компилятору по вашему выбору в поле компилятора, например мой: /opt/ti-processor-sdk-linux-am335x-evm-02.00.00.00/linux-devkit/ sysroots / x86_64-Араго-линукс / USR / бен / арм-Linux-gnueabihf-г ++»
столбец ABI select arm-linux-generic-elf-32bit
После завершения нажмите «Применить»


2.4 Добавить отладчик
Выберите опцию «Построить и запустить» в левой строке меню, затем выберите опцию «Отладчики» в верхней строке меню и, наконец, нажмите «Добавить» справа.
Введите имя GDB (определенное вами) в столбце «Имя» ниже
Введите путь отладчика, который вы выбрали в поле «Путь», например, мой: /opt/ti-processor-sdk-linux-am335x-evm-02.00.00.00/linux-devkit/sysroots / x86_64-Араго-линукс / USR / бен / арм-линукс-gnueabihf-GDB»
После завершения нажмите «Применить»


2.5 Добавьте версии QT, которые доступны qmake
Выберите опцию «Build and Run» в левой строке меню, затем выберите опцию «Qt Versions» в верхней строке меню и, наконец, нажмите «Add . » справа.
Нажмите на кнопку обзора внизу и выберите свой доступный qmake
После завершения нажмите «Применить»


2.6 Добавить сборочный комплект
Выберите опцию «Построить и запустить» в левой строке меню, затем выберите опцию «Сборка» в верхней строке меню и, наконец, нажмите «Добавить» справа.
В приведенном ниже столбце имени введите название пакета (определяется вами)
Выберите тип устройства «Универсальное устройство Linux»
Устройство выберите устройство, добавленное на шаге 2.2.
Компилятор Выберите компилятор, добавленный на шаге 2.3.
Отладчик Выберите отладчик, добавленный на шаге 2.4.
версия Qt Выберите версию QT, добавленную на шаге 2.5.
Введите путь отладчика, который вы выбрали в поле «Путь», например, мой: /opt/ti-processor-sdk-linux-am335x-evm-02.00.00.00/linux-devkit/sysroots / x86_64-Араго-линукс / USR / бен / арм-линукс-gnueabihf-GDB»
После завершения нажмите «Применить» и «ОК»


  • Создать QTproject и скомпилировать и отладить







Нажмите «Выполнить» ниже. Выберите «Создать архив» и «Развернуть архив через SFTP-загрузку» в раскрывающемся меню меню «Добавить этап развертывания» по очереди




Вы можете просмотреть компиляцию, отладку и другую информацию о программе, выбрав пункты 1-7 ниже


Вы также можете нажать кнопку «Отладка» в левой строке меню, чтобы отладить точку останова.

Читайте также: