Выполнить 32-битный объектный файл в 64-битной среде

Я создал цепочку инструментов кросс-компиляции для arm-gcc, настроив binutils, newlib, gcc и gdb для цели arm-elf. Проблема, с которой я сталкиваюсь, заключается в том, что когда я компилирую программу с помощью arm-elf-gcc на своем Mac, она генерирует 32-битный исполняемый файл, который не может быть выполнен в 64-битной среде.

Как проще всего это обойти? Я мог бы поместить 32-битные исполняемые файлы в среду ARM, но мне интересно узнать, могу ли я каким-либо образом выполнить файл на своем Mac?

--Добавлен--

Я должен был сделать это раньше, но позвольте мне сообщить, что целью моей программы является Beagleboard, и я ожидая, что я буду компилировать и генерировать объекты с помощью arm-gcc в моей Mac OS X и передавать *.o на Beagleboard для просмотра вывода. Увы, такая же ошибка возникает и на Beagleboard, когда я делаю ./hello.o.

Спасибо,
Саян


person Sayan    schedule 15.09.2010    source источник


Ответы (2)


Есть несколько проблем, которые мешают вам запустить исполняемый файл на Mac.

1) Архитектура. Ваш Mac, вероятно, является машиной x86/x86_64 (или PowerPC), но ваш двоичный файл скомпилирован для архитектуры ARM (в этом весь смысл использования кросс-компилятора). Эти наборы инструкций несовместимы.

2) Ваш двоичный файл связан как объектный файл ELF, тогда как Mac использует формат объектного файла Mach-O. Ваша ОС не может загрузить этот исполняемый формат.

3) Ваш исполняемый файл связан с newlib (для какой-то цели, которая, вероятно, не является Mac OS) вместо Mac OS libc. Ваши системные вызовы неверны для этой платформы.

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

person Variable Length Coder    schedule 15.09.2010
comment
Спасибо, что заставили меня понять. Вероятно, будет искать эмулятор ARM. - person Sayan; 15.09.2010

Тот факт, что он 32-битный, не имеет значения — вы не можете выполнить код ARM на Mac (если только вы не найдете какой-нибудь эмулятор ARM).

person Paul R    schedule 15.09.2010
comment
Хорошо, просто хотел это знать. Вероятно, будет искать эмулятор ARM. Спасибо! - person Sayan; 15.09.2010
comment
Встроенная эмуляция жесткой руки Qemu. - person doron; 16.09.2010