在Android系统下,用Native C的方式运行一个简单的hello world,结果折腾了两天才运行起来。
开始直接用arm-none-linux-gnueabi-gcc编译,放到系统下,不能运行,后来查找资料,要写Android.mk,用mm之类的编译才行,于是学习了下Android.mk的知识,http://blog.csdn.net/smfwuxiao/article/details/8530742,http://blog.csdn.net/embedded_hunter/article/details/7167448,写了Android.mk,但是mm之类的都不执行,于是乎http://blog.csdn.net/luoshengyang/article/details/6566662
执行envsetup.sh,还是不行,偶然发现在平台代码路径能用mm这类命令,于是编译,但总是出现no rule to make target 之类的错误,不是很明白,查了查,一些方法都不管用,看到有说把整个工程都编译一下的,于是把整个Android编译了一遍,能编过去了,找到编出来的hello用sdcard copy到Android下面,从控制台运行# ./hello或者#source hello,权限不对,#chmod 777 hello,还是不对,后来不知从哪看到要拷贝到/data下面,cp命令不能用,又学会了用cat hello > /data/hello;在data下看了权限#ll,能运行了。但这样全部编译一遍时间太长。于是又回到mm编译,还是不过,总是no rule to make target “crtbegin_dynamic.o”,于是研究crtbegin_dynamic.o干什么用的,是交叉编译给C用的。但也没能编译过去,后来看到http://android-sz.iteye.com/blog/828246,于是发现又回到了原点arm-none-linux-gnueabi-gcc -static hello.c -o hello。我开始没加-static。这样编译了过去。并能在目标板上执行,目标板是samsung E4412.
这里学会了用cat,ll,熟悉了chmod,./等命令。
留有疑问的地方,Android.mk为什么不能用,为什么要在/data/下才能执行。