配置安卓中间件的开发环境

对于一个完全没有安卓方面开发经验的小白来说,要在linux系统上搭建安卓的开发环境,只能通过百度,一篇篇的参考论坛大神们的经验了。这几天,鬼知道我经历了什么。接下来就讲讲我如何在安卓开发板上跑起hello world 的程序吧。

hello world

glibc库下的Hello World

对于ARM版来说,一般我们挂载的rootfs文件系统的话直接用交叉编译链arm-linux-gcc 编译C文件即可,但是对于挂载的Android系统的话,开发环境是不一样的。于是我便参考了这个博主的问题,对交叉编译有了更深层次的了解。
如何在android设备上面跑C或C++程序?
但是,虽然运行结果能够实现,由于改了链接的环境,Android的链接器链接到了不同的动态库,导致许多命令行操作出错。刚开始我就一直在想这样该怎样解决,但是一直解决不了。
后面我才发现,真正的原因是我一开始的想法就错了。开发安卓中间件的大牛们肯定不会用这种方法。这样又到百度上找了很多资料,才慢慢理解了。

android 环境下的Hello World

通过大量百度后,发现如果要使用Android系统里面的库,我们就要使用ndk。于是又搜索了ndk环境的搭建,配置多次后终于在这篇博文中配置成功了。
Ubuntu下搭建android NDK R7开发环境
配置完开发环境后,想要 配置android NDK 交叉编译,实现在Ubuntu 命令行下将C文件放在arm上跑。于是小编便找到了下面这篇文章
android NDK 交叉编译
配置到这一步,真的很兴奋。想着开发板即将跑起hello world想想就激动。但是成功不可能来得那么简单,运行程序后,出现了

error: only position independent executables (PIE) are supported.

于是又去百度了原因,原来是PIE这个安全机制从4.1引入,但是Android L之前的系统版本并不会去检验可执行文件是否基于PIE编译出的。因此不会报错。但是Android L已经开启验证,如果调用的可执行文件不是基于PIE方式编译的,则无法运行。小编找了好久,基本都是说要修改Android.mk。但是这个是在eclipse开发的时候才用到的呀。我只想linux命令行的,终于在下面这篇文章找到了解决方法。
Android5.0 使用原来的binary出现error: only position independent executables (PIE) are supported.

只要在交叉编译链的gcc 直接加-fPIE -pie就可以了
最后跑起了hello world ,但是还是出现了以下警告


WARNING: linker: ./hello_world has text relocations. This is wasting memory and prevents security hardening. Please fix.

大概是说浪费内存那些,应该问题不大。
于是花了两三天终于把安卓中间件的开发环境搭好了。

你可能感兴趣的:(安卓的交叉编译环境,安卓中间件,安卓,交叉编译,中间件,arm)