手工编译NDK程序

[toc]

##一、NDK环境配置

1.NDK目录结构

目录名 描述
build 存放和编译相关的脚本文件,最外面的ndk-build就是调用该目录下的makefile文件,其中makefile文件都存放在build/core目录
docs 帮助文档
platforms 存放不同android版本,不同平台架构的头文件和库文件
prebuilt 存放和编译相关工具比如make.exe
samples ndk代码例子,用根目录下的ndk-build即可编译
source 源码目录,有一些头文件和库文件,比如gnu-libstdc,stlport
test 一些测试样例,有很多例子可以从里面学习
toolchains 不同平台的编译器链接器目录以及一些和编译连接相关的工具,gcc,ld等工具都在这个目录

2.添加环境变量

  • 新建环境变量

    ANDROID_NDK = G:\android-ndk-r12b

  • 在Pathpath环境变量中添加

    %Android_NDK% NDK根目录
    %Android_NDK%\prebuilt\windows\bin; //make.exe目录

  • 测试环境变量

  • 以上则表示环境变量成功。*

3.编译

1
2
3
4
`E:\Android\NDK\toolchains\arm-linux-androideabi-4.8\prebuilt\windows\bin\arm-linux-androideabi-gcc.exe`    //GCC编译器路径
`-I` //指明 头文件 的路径
`-c` //指明源文件
`-o` //指明输出文件
1
E:\Android\NDK\toolchains\arm-linux-androideabi-4.8\prebuilt\windows\bin\arm-linux-androideabi-gcc.exe -I E:\Android\NDK\platforms\android-14\arch-arm\usr\include -c E:\MarkDown\Hello.c

4.链接

1
E:\Android\NDK\toolchains\arm-linux-androideabi-4.8\prebuilt\windows\bin\arm-linux-androideabi-gcc-4.8.exe  -L E:\Android\NDK\platforms\android-14\arch-arm\usr\lib -Bdynamic -lgcc -nostdlib -lc Hello.o -o Hello E:\Android\NDK\platforms\android-14\arch-arm\usr\lib\crtbegin_dynamic.o E:\Android\NDK\platforms\android-14\arch-arm\usr\lib\crtend_android.o
1
2
3
4
5
6
7
8
9
10
11
E:\Android\NDK\toolchains\arm-linux-androideabi-4.8\prebuilt\windows\bin\arm-linux-androideabi-gcc.exe       //编译器路径
-L E:\Android\NDK\platforms\android-14\arch-arm\usr\lib //头文件路径
-Bdynamic //
-lgcc //
-nostdlib //不需要扫描默认标准头文件(自己指定)
-lc Hello.o //源OBJ

E:\Android\NDK\platforms\android-14\arch-arm\usr\lib\crtbegin_dynamic.o //动态Crt入口
E:\Android\NDK\platforms\android-14\arch-arm\usr\lib\crtend_android.o //Crt出口

-o Hello //目标文件(可执行文件)

这个链接选项,只支持链接.C文件编译的.O文件, 不支持.CPP

5.运行

注意: 应在临时目录/data/local中执行,其他地方无法执行

1
2
3
4
5
6
7
8
//将文件拷到/data/local目录
adb push Hello /data/local/

//修改文件属性
adb shell chmod 777 /data/local/Hello

//运行程序
adb shell /data/local/Hello
文章目录
  1. 1. 1.NDK目录结构
  2. 2. 2.添加环境变量
  3. 3. 3.编译
  4. 4. 4.链接
  5. 5. 5.运行
|