前面关于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 提供脚本,允许自己定制一套工具链。
-
$NDK_ROOT/build/tools/make-standalone-toolchain.sh --ndk-dir=../../ \
-
--platform=android-8 \
-
--install-dir=$HOME/android-toolchain-arm/android-8 \
-
--arch=arm \
-
--toolchain=arm-linux-androideabi-4.6
-
-
-
--ndk-dir:指定ndk的安装更目录,即$NDK_ROOT
-
--platform:指定android的开发版本
-
--install-dir:定制的交叉工具链目录
-
--arch:cpu的体系架构
-
--toolchain:交叉工具链
-
具体可参见 $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
阅读(1719) | 评论(0) | 转发(0) |