2013-02-27 2 views
0

Кажется, что gcc не принимает параметр -m32 для цели ARM. Я не уверен, как gcc ведет себя на 64-битной Linux, но автоматически ли он генерирует 32-битные двоичные файлы, если gcc из ELF32 работает на 64-битной Linux?Построение 32-битного двоичного кода для ARM на 64 бит CentOS

Если да, то есть ли какое-либо обходное решение?

Заранее спасибо.

+0

http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html – auselen

+0

Нет такой вещи, как 64-разрядная ARM. –

ответ

2

Вам необходимо использовать кросс-компилятор для компиляции для ARM с вашего хоста, работающего либо на x86, либо на x86_64, причиной чего является ваш хост и цель - 2 полностью независимые архитектуры.

Перекрестный компилятор обычно должен быть сконфигурирован для вывода только 32-битного или 64-битного двоичного кода для ARM (не оба). Большинство приложений ARM-устройств используют только 32-битные, и поэтому использование кросс-компилятора без каких-либо дополнительных аргументов будет создавать 32-битные двоичные файлы.

Наконечники имеют другие -m флаги, чтобы указать тип машины, такой как armv7, arm aort 8 и т. Д. Для дальнейшей оптимизации. Вам нужно посмотреть документацию кросс-компилятора ARM.

Что касается получения правильной инструментальной цепочки, которая работает для вашей цели и работает под CentOS, лучше начать с сайта поставщика целевого устройства.

Опция -m32, предоставленная версией gcc x86_64, делает gcc компиляции 32-разрядных двоичных файлов вместо 64-разрядных, поскольку набор команд x86 и x86_64 (AMD64 или Intel EMT64) весьма схожи. Особенно тот факт, что он позволяет легко выполнять 32-битные инструкции в 64-битном режиме.

+0

Я использую gcc, настроенный поставщиком SoC, который больше не поддерживает gcc. Поставщик сказал, что gcc не будет работать корректно на 64-битной Linux. Поэтому я ищу обходное решение. – HenryK

+1

Большинство файлов gcc-файлов gcc для инструментальной цепочки компиляции скомпилированы для запуска на 32-битном узле (т. Е. X86). И 64-разрядные хосты linux поддерживают бесперебойную работу 32-битных двоичных файлов. Фактические команды, вызванные кросс-toolchain gcc, будут одинаковыми независимо от того, что хост является 32-битным или 64-битным. Я сам использовал перекрестные компиляторы MIPS и ARM на обоих 32-битных и 64-битных хостах без изменений. – Tuxdude

+0

Вы видели разницу в размере файла между двоичным кодом, созданным на 32-битном хосте и одним на 64-битном? – HenryK