Как стать автором
Обновить

Комментарии 8

линковщик (в моём случае ld.bfd), который не умеет собирать для AArch64

Блин, а мужики-то не знают!

Спасибо за подробное описание. Немного не понял, в чём суть флага --gcc-toolchain. Если clang компилирует сразу под целевую систему, то зачем здесь нужен gcc?

Заранее извиняюсь за скорее всего тупой вопрос, просто раньше практически не имел дела с кросс-компиляцией, но хочется попробовать собрать что-то современное под платформу Blackberry 10, где кроме gcc 4.6 ничего нет.

Это, по сути, обособленная часть sysroot.

Обычно всё в /usr/include, /usr/lib - но некоторые специфичные либы поставляются вместе с gcc. Также там некоторые объектники (crt*.o)

--gcc-toolchain=<arg>

Search for GCC installation in the specified directory on targets which commonly use GCC. The directory usually contains ‘lib{,32,64}/gcc{,-cross}/$triple’ and ‘include’. If specified, sysroot is skipped for GCC detection. Note: executables (e.g. ld) used by the compiler are not overridden by the selected GCC installation

В принципе, можно сделать тулчейн не зависящий от gcc, нужно собрать compiler-rt, libunwind, libc++, libc++abi из состава llvm. Правда, это может быть довольно хлопотно для некоторых архитектур.

Gcc тулчейн хоть и неудобен, но зато собирается под гораздо более широкий набор платформ, чем полноценный clang тулчейн.

Ещё можно дочитать до конца.

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

Часто целевая платформа содержит патченый компилятор

Я бы сказал, что наоборот, это крайне редко. Куча железок имеют только кроссы. Даже на тех же линуксах собирают кроссами, чтобы гарантированно запускаться на системах с нужной версией (g)libc

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории