2011-01-19 2 views
0

Я разработчик Java. У меня есть код на C++ для совершения каких-либо системных вызовов. Этот код скомпилирован на 32-битной платформе Intel с использованием GCC (у меня есть файлы), и он отлично работает на обычной 32-разрядной Linux-машине на базе Intel. Теперь мне нужно запустить это в операционной системе Linux, работающей на процессоре Marvell ARM. Когда я загружаю общие объекты в java, я получаю следующую ошибку.Компиляция моего кода на C++ для архитектуры ARM

не может открыть общий объектный файл: Нет такого файла или каталога (Возможная причина: не может загрузить IA 32-битную .so на ARM-битную платформу)

Скажите, пожалуйста, как решить эту проблему , Я просмотрел параметры GCC, и я нашел один вариант указать архитектуру (-march = armv5), и я не могу ее скомпилировать.

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

+8

Вам нужен кросс-компилятор или просто перекомпилируйте систему Linux ARM. –

+3

Посетите http://ymorin.is-a-geek.org/hg/crosstool-ng/, который поставляет комплект для создания кросс-компиляторов для многих хост-и целевых платформ. – mmmmmmmm

+1

Также, crosstool-ng homepage: http: // ymorin .is-a-geek.org/projects/crosstool – Hasturkun

ответ

4

Вам нужно больше, чем просто переключатель, вам нужен кросс-компилятор. Вы можете сделать свой собственный, но, возможно, самый простой способ:

  • Найти инструменты для разработки вашей доски. Это, вероятно, поставляется с комплектом разработки, которая включает в себя кросс-компиляции набора инструментов

  • Если у вас нет этого, вы можете попробовать установить скомпилированную кросс-компиляции, как те, свободно предоставляемые CodeSourcery

Затем вам нужно указать расположение вашей инструментальной цепочки (найдите что-то вроде arm-none-linux-gnueabi-gcc), доступное на вашем пути.

крест компиляции простой проект, то легко, просто переопределить переменную CC в вашем Makefile:

CROSS = arm-none-linux-gnueabi- 
CC = $(CROSS)gcc 
LD = $(CROSS)ld 
0

Попробуйте использовать переключатель -mcpu = armv5 для gcc.

+1

-mcpu устарел. если я использую -march = armv5, я получаю следующую ошибку. error: bad value (armv5) для -march = switch – M99

+7

В большинстве случаев (включая этот случай) вам нужен кросс-компилятор, который нацелен на среду ARM, а компилятор, создавший код Intel, не будет знать, как компилировать код руки. – gravitron

Смежные вопросы