编译在android 平台上跑的C应用程序
Android 用的是 Bionic C, 而不是通常的glibc,因此简单使用交叉工具链并不能够编译出适合运行在android 设备上的 C/C++ 程序。
交叉工具链可以很轻松在 Android 源码 prebuilts 目录下找到,但是直接编译会提示找不到各种标准库的头文件,需要指定 Bionic C库 的 sysroot.
像 Tiny 6410 开发板带的Android toolchain 因为集成了sysroot,因此可以直接用于编译C/C++ 代码。
本文讲述如何为任何一个Android 设备(ARM v7a )使用 android 提供的NDK 工具编译代码(busybox)。
1) 下载 Android NDK 交叉工具链及 sysroot
http://developer.android.com/tools/sdk/ndk/index.html#Downloads
解压之后,在下面的路径中可以找到交叉工具链
android-ndk-r9/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin
arm-linux-androideabi-addr2line*  arm-linux-androideabi-elfedit*  arm-linux-androideabi-gcc-ranlib*  arm-linux-androideabi-ld.gold*  arm-linux-androideabi-readelf*
arm-linux-androideabi-ar*         arm-linux-androideabi-g++*      arm-linux-androideabi-gcov*        arm-linux-androideabi-ld.mcld*  arm-linux-androideabi-run*
arm-linux-androideabi-as*         arm-linux-androideabi-gcc*      arm-linux-androideabi-gdb*         arm-linux-androideabi-nm*       arm-linux-androideabi-size*
arm-linux-androideabi-c++*        arm-linux-androideabi-gcc-4.8*  arm-linux-androideabi-gprof*       arm-linux-androideabi-objcopy*  arm-linux-androideabi-strings*
arm-linux-androideabi-c++filt*    arm-linux-androideabi-gcc-ar*   arm-linux-androideabi-ld*          arm-linux-androideabi-objdump*  arm-linux-androideabi-strip*
arm-linux-androideabi-cpp*        arm-linux-androideabi-gcc-nm*   arm-linux-androideabi-ld.bfd*      arm-linux-androideabi-ranlib*
最好将这个路径加入到环境变量。
android-ndk-r9/platforms/android-18/arch-arm 这个路径下面放的是 Android API18 的sysroot.
通过http://source.android.com/source/build-numbers.html#platform-code-names-versions-api-levels-and-ndk-releases 获取API 版本和android 发行版本的对应关系。
2) 编译简单的 hello world
$ cat hello.c 
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
    printf("Hello world ! \n");
    return 0;
}
$ arm-linux-androideabi-gcc -o hello --sysroot=/home/xxx/android-ndk-r9/platforms/android-18/arch-arm/ hello.c
3). 移植 busybox
$ git clone git://busybox.net/busybox.git
busybox$ cp configs/android_ndk_defconfig .config
$ make menuconfig
修改 sysroot config 到自己的路径。
$ make -j 8
$ make install
默认安装到 当前路径下的 _install/
$ adb push _install /data/busybox/
参考:
https://github.com/tias/android-busybox-ndk
That's all ! Enjoy your busybox on your own Android Now !
 
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号