Выполнить 32-битный объектный файл в 64-битной среде - PullRequest
2 голосов
/ 15 сентября 2010

Я сделал кросс-компиляцию набора инструментов для 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.

Спасибо
Саян

Ответы [ 2 ]

4 голосов
/ 15 сентября 2010

Существует несколько проблем, препятствующих запуску исполняемого файла на Mac.

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

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

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

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

1 голос
/ 15 сентября 2010

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

...