Hello World на Си для андроида
Что требуется для компиляции
- Компилятор GCC для ARM. Далее буду описывать работу под виндами
- Модифицированный скрипт, необходимый для адаптации компилятора для компилирования под андроид - armelf_linux_eabi.xsc
Отмазка
Я плохо разбираюсь в GCC и многого не понимаю еще и этот мануал - выдержка из слежующих блогов:
- My Brain Hurts by Koushik
- Android by Davanum
- Post1 and Post2 in motz diary by Honeypod
- Unnamed Buenno Blog
Компиляция 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… [...]
Автор: Androider | 06.04.2009 00:12