Здание gcc
проходит через конфигурацию шаг, часть этого является указанием back-end. Основание отвечает за генерацию op-code
. Типичным компилятором является множество фаз. Вкратце,
- Parser - преобразовать текст в представление данных.
- Передняя часть - оптимизируйте, изменив конструкцию кода, возможно, специфичную для языка.
- Среднее значение - Выполняет Информатика Оптимизация, которая является общей для любого компилятора.
- Задний конец - Выполняет оптимизацию, специфичную для целевого ЦП.
См. stackoverflow compiler wiki для получения дополнительной информации.
Итак части один к три являются общими для x86
и ARM
версий gcc
(или любого НКИ). Компилятор Android - это версия gcc
, которая была сконфигурирована для генерации ARM. Это другой компилятор, чем тот, который обычно работает на x86. Возможно, вы запускаете эмулятор ARM на ПК, а затем считаете, что этот код работает x86. Однако это код virtual ARM machine, запускающий этот код. Процессор x86
не может запустить ARM
код изначально.
Android gcc ARM настроен gcc
. A нормальный Распределения Linuxgcc
настроен для x86
или x86_64
.
Что-то отсутствует выше: Кто компилирует компилятор? В обоих случаях компилятор компилятора x86 компилирует новый компилятор. Разница заключается в выбранном back-end.Один из них - x86, другой ARM. Оба компилятора работают на x86, но они генерируют код для разных целей . Gcc может только сгенерировать код для ARM
или a x86
; никогда не с помощью какого-либо переключателя командной строки. Компилятор build обычно относится к трем различным типам процессоров.
- - Машина, на которой построен компилятор. Это компилятор компилятора.
- Хост - машина, на которой работает компилятор. Это не выход, а сам компилятор.
- Target - аппарат back-end целей. Создается один код.
Я думаю, что, может быть, люди думают, потому что они оба работают на тот же хост , они должны генерировать код для тех же целей . Но это неправда; это немного ума, изгибающегося сначала. В зависимости от настройки вам могут понадобиться компиляторы для каждой из этих машин, чтобы составить окончательный компилятор.
Первым компилятором для любой машины обычно является кросс-компилятор. За исключением некоторых людей, которые давно создали примитивные компиляторы в ассемблере.
См. Также: Cross compiler.
Невозможно написать код ARM с компьютера x86 ... – kennytm
Но это так, не так ли? Я никогда не знал о вашем вопросе, у моего приложения много кода на C++, и он отлично работает на ARM, я клянусь. –