Форум программистов, компьютерный форум, киберфорум
Кроссплатформенная разработка
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
1

Кросс компиляция под архитектуру ARMv8 на Linux машине

27.09.2018, 00:33. Показов 3364. Ответов 5

Необходимо скомпилировать бинарник, который запустится на Raspberry Pi 3+, и код должен соответствовать стандарту c++17. Официальный кросс-компилятор (https://github.com/raspberrypi... rm-bcm2708 устаревший и не поддерживает стандарт. Как решение нашёл два варианта:

1) Установить g++-8-arm-linux-gnueabihf компилятор и собирать с ним

2) Указать опцию gcc -march (https://gcc.gnu.org/onlinedocs... tions.html)

Чем эти варианты отличаются и какой лучше? Компилировать на самой плате не подходит, так как слишком долго.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2018, 00:33
Ответы с готовыми решениями:

Qt: кросс-компиляция из windows под linux
День добрый, пытаюсь настроить компилятор qt, чтобы тот мог компилировать под linux на windows. ...

Компиляция под linux с mingw
Задача: скомпилировать программу для linux(elf) из под windows, используя mingw. Добавлено через...

Кросс компиляция под Win из Linux
Я вроде как собрал qmake для компилятора mingw, собрал библиотеки Qt, но компилировать не...

Кросс-компиляция из Windows для Linux, MacOS
Доброго времени суток! Имеется проект написанный на C++ в Qt, скомпилирован под Windows...

5
15361 / 8308 / 2015
Регистрация: 30.01.2014
Сообщений: 14,185
20.10.2018, 20:04 2
Цитата Сообщение от #pragma Посмотреть сообщение
Указать опцию gcc -march
А вы пробовали этот вариант?
Вы же знаете, что комплект должен быть собран с поддержкой данной архитектуры, чтобы эта опция сработала?

Цитата Сообщение от #pragma Посмотреть сообщение
Установить g++-8-arm-linux-gnueabihf компилятор и собирать с ним
Угу.
1
Evg
Эксперт CАвтор FAQ
21228 / 8241 / 636
Регистрация: 30.03.2009
Сообщений: 22,596
Записей в блоге: 30
20.10.2018, 21:11 3
Лучший ответ Сообщение было отмечено #pragma как решение

Решение

Цитата Сообщение от #pragma Посмотреть сообщение
2) Указать опцию gcc -march
Сия опция влияет только на построение объектного файла. Она НЕ влияет на процесс линковки в том смысле, что комплект библиотек только один, а под какую машину он собран - компилятор не знает. Т.е. что есть, под то и получится бинарник

Со всякими кросс-комплектами тоже надо работать аккуратно. Нужно быть уверенным, что в кросс-режиме динамические библиотеки используются ровно такие же, как и установленные на машине. В противном случае можно нарваться на мину

Добавлено через 4 минуты
В идеале лучше самому научиться собирать cross-toolchain (так по умному называется кросс-комплект) из компонент нужных тебе версий (gcc, binutils, glibc, kernel-headers). Только надо где-то поискать грамотное описание такого процесса
1
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
06.11.2018, 07:25  [ТС] 4
Цитата Сообщение от Evg Посмотреть сообщение
Со всякими кросс-комплектами тоже надо работать аккуратно. Нужно быть уверенным, что в кросс-режиме динамические библиотеки используются ровно такие же, как и установленные на машине. В противном случае можно нарваться на мину
Поискав в сети, я так понял, что если в проекте есть библиотечные зависимости, которые линкуются с бинарником, то нужно либо компилировать и их тоже вместе с их зависимостями (и так далее рекурсивно ), либо компилить до стадии линковки и линковать уже на целевой архитектуре (что довольно криво)
Цитата Сообщение от Evg Посмотреть сообщение
Добавлено через 4 минуты
В идеале лучше самому научиться собирать cross-toolchain (так по умному называется кросс-комплект) из компонент нужных тебе версий (gcc, binutils, glibc, kernel-headers). Только надо где-то поискать грамотное описание такого процесса
Нашёл довольно простую инструкцию в одном блоге на эту тему https://www.bootc.net/archives... pberry-pi/
Собирал по нему, всё собралось, правда там ньюансы тоже есть, связанные с поддержкой чисел с плавающей точкой (soft или hard).
Ну и ещё до кучи, если кому сгодится:
https://medium.com/@au42/the-u... 56054de187 - Тут объясняется, как делать toolchain-файлы для cmake. Хотя я пока не смог скомпилить проект, у которого в зависимостях есть OpenCV под другую архитектуру, у них там при кросс-компиляции подставляются свои toolchain-файлы, и непонятно, что с этим делать пока.

А вот ту уже для любителей, чисто кросс-комплект "сделай сам" https://solarianprogrammer.com... pberry-pi/ но по нему не пробовал собирать, хотя думаю это более гибкий способ (в кросс комплекте не всегда присутствуют библиотеки нужных версий)
0
Evg
Эксперт CАвтор FAQ
21228 / 8241 / 636
Регистрация: 30.03.2009
Сообщений: 22,596
Записей в блоге: 30
06.11.2018, 15:50 5
Цитата Сообщение от #pragma Посмотреть сообщение
Поискав в сети, я так понял, что если в проекте есть библиотечные зависимости, которые линкуются с бинарником, то нужно либо компилировать и их тоже вместе с их зависимостями (и так далее рекурсивно ), либо компилить до стадии линковки и линковать уже на целевой архитектуре (что довольно криво)
По сути да, но второй вариант на практике получится только в кустарных случаях. В софте, который собирается через configure, почти наверняка окажется так, что родная сборка к таким соплям не готова
1
Evg
Эксперт CАвтор FAQ
21228 / 8241 / 636
Регистрация: 30.03.2009
Сообщений: 22,596
Записей в блоге: 30
11.11.2018, 11:21 6
Цитата Сообщение от #pragma Посмотреть сообщение
Нашёл довольно простую инструкцию в одном блоге на эту тему
Некие добрые люди написали утилиту crosstool-ng для автоматизации процесса сборки toolchain'а. Сам по себе процесс сборки toolchain'а - это довольно сложная штука, в котором по смыслу есть миллион разных настроек (начиная с выбора конкретных версий gcc, binutils, glibc, kernel-headers). Очевидно, что разработчики crosstool-ng просто не в состоянии учесть весь миллион тонкостей, а потому через данную утилиту будет нормально работать сборка только в определённых рамках (неспроста автору блога пришлось включать ряд experimental фич). Для одноразовой сборки такой вариант сойдёт, однако есть опасения, что уже в твоём случае пойдёт всё не так гладко. С момента написания статьи прошло 6 лет, уже очень много всё поменялось, а потому взять свежие версии gcc и тупо следовать инструкциям в блоге скорее всего не получится

Третья ссылка с полностью ручной сборкой выглядит более правильной в плане обучения. Однако здесь тоже по смыслу набор инструкций. В идеале автору бы написать, из каких соображений нужно делать именно так, а не эдак. Т.е. полезно понимать, как устроена вся эта колхозная кухня, если в будущем планируешь более-менее плотно заниматься этим хозяйством
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.11.2018, 11:21

Компиляция под Windows из Linux
Компиляция под Windows из Linux - возможно ли это? По идее как-то можно с MinGW, есть у кого опыт?

Сборка и компиляция под Linux
Скачал и установил Qt с официального сайта по инструкции под Ubuntu. Qt creator нормально работает....

QT компиляция из Windows под Linux
Поделитесь, если не сложно, линком как сие делать.

Установка Qt на Linux для кросс-компиляции: Linux 32/64 Windows 32/64
В силу объективных причин пришлось перейти на Linux, но столкнулся с проблемой установки окружения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru