Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88239
  • 博文数量: 24
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 231
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-13 21:06
个人简介

来也匆匆 几十繁华一阵风; 去也匆匆 回头一看已成空

文章分类

全部博文(24)

文章存档

2016年(4)

2015年(20)

我的朋友

分类: Android平台

2015-06-15 16:16:32

前面关于NDK的编译都是结合Android.mk来说的,如果我们想打造自己的集成编译环境或将ndk编译集成到项目现有的cmake、automake等集成构建环境中,该怎么做呢?其实android ndk已经提供了一个脚本,允许定制自己的工具链。且听我下面一一道来!

1. 下载NDK工具包,解压安装,配置环境变量。

NDK_ROOT=ndk_install_dir (NDK_ROOT为ndk的安装目录)

2. 设置sysroot环境变量

什么是sysroot呢?
sysroot选项设定gcc在编译源码的时候,寻找头文件和库文件的根目录。可以这样调用 gcc --sysroot=/tmp/gcc-arm (及其他选项)。NDK_ROOT 根目录下的platforms目录中的各个子目录的路径都可以直接传给 gcc --sysroot=

。为了简化操作,可以在linux系统的命令终端执行以下命令,设置SYSROOT环境变量,$NDK_ROOT是ndk的根目录。

SYSROOT=$NDK_ROOT/platforms/android-8/arch-arm //android-8:依赖开发版本; arch-arm:cpu体系架构(arm)

3. 定制交叉工具链

android ndk 提供脚本,允许自己定制一套工具链。

点击(此处)折叠或打开

  1. $NDK_ROOT/build/tools/make-standalone-toolchain.sh  --ndk-dir=../../ \
  2.                                                     --platform=android-8 \
  3.                                                     --install-dir=$HOME/android-toolchain-arm/android-8 \
  4.                                                     --arch=arm \
  5.                                                     --toolchain=arm-linux-androideabi-4.6
  6. --ndk-dir:指定ndk的安装更目录,即$NDK_ROOT
  7. --platform:指定android的开发版本
  8. --install-dir:定制的交叉工具链目录
  9. --arch:cpu的体系架构
  10. --toolchain:交叉工具链
  11. 具体可参见 $NDK_ROOT/build/tools/make-standalone-toolchain.sh --help


设置交叉编译链PATH:
PATH=$$HOME/android-toolchain-arm/android-8/bin:$PATH

执行完上述操作之后,我们就可以直接整Makefile,彻底摆脱Android.mk

4. 警告,限制

    NDK 工具链默认支持C++异常和RTTI(Run Time Type Information),可以用 -fno-exception 和 -fno-rtti 关闭(生成的机器码更小).
注意: 如果要用这两个特性,需要显式链接 libsupc++。例如: arm-linux-androideabi-g++ .... -lsupc++ 
NDK 提供了 libstdc++,因而可以用 STL,但需要显式链接 libstdc++ ( gcc ... -lstdc++)。不过在将来可以不用手动指定这个链接参数。


引用:android-ndk-r8/docs/STANDALONE-TOOLCHAIN.html



阅读(1697) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~