Hello World на Си для андроида

Что требуется для компиляции

  • Компилятор GCC для ARM. Далее буду описывать работу под виндами
  • Модифицированный скрипт, необходимый для адаптации компилятора для компилирования под андроид - armelf_linux_eabi.xsc

Отмазка

Я плохо разбираюсь в GCC и многого не понимаю еще и этот мануал - выдержка из слежующих блогов:

Компиляция HelloWorld’а со статичной линковкой

После установки компилятора мы можем сразу скомпилировать свой HelloWorld с таким кодом файла main.c:
#include <stdio.h>;
int main()
{
printf("Hello Kitty!");
    return 0;
}
Выполнив такой код в папке с этим файлом:
arm-none-linux-gnueabi-gcc -static main.c -o main
В результате мы получили бинарник теперь его необходимо загрузить на G1 или эмулятор, прописать права на выполнение и запустить:
adb push  main /data/myjni
adb shell
#cd /data
#chmod 777 myjni
#./myjni
В результате получим надпись “Hello Kitty!” на экране) Если не верите, то вот пруф - скриншот с экрана G1, но у меня myjni немного не тот бинарник. Результат подобных действий у меня в native:
Но есть огромный минус - статическая линковка. и таким образом мы подходим к следующему пункту.

Динамическая компиляция

В андроиде таблица импортов/экспортов немного не такая как сделана в этом компиляторе и поэтому необходимо вмешиваться в работу компилятора.
Первое, что нам нужно сделать - это скачать файл armelf_linux_eabi.xsc и заменить им такой же файл в дистрибе компилятора - %CompilerPath%\arm-none-linux-gnueabi\lib\ldscripts\
Затем нам нужно сделать так, что бы в пути к компилятору не было пробелов. Это необходимо, поскольку как-то некорректно работает этот GCC с парамертрами, которые содержат пробелы(
Я решил дело просто - сделал символьную ссылку на папку компилятора и назвал её D:\GCC
Теперь непосредственно компилируем и линкуем:
arm-none-linux-gnueabi-gcc -fpic -c myjni.c -o D:\CompileTemp\myjni.o
arm-none-linux-gnueabi-ld -TD:\GCC\arm-none-linux-gnueabi\lib\ldscripts\armelf_linux_eabi.xsc -shared -o D:\CompileTemp\myjni.so D:\CompileTemp\myjni.o 
Тут еще проблема была - выходной файл из компилятора без указания абсолютного пути писался непонятно куда… пришлось вручную писать во временную папку(
Теперь все с динамическим кодом и в результате мы получили полноценный HelloWorld

Трекбек

Ссылка для трекбека:
http://stepa.name/archives/99/trackback

Комментарии

[...] под Google Andoroid « Hello World на Си для андроида | Забавный SoundPool… [...]

Post a comment