支持STL的Android NDK中的独立toolchain制作方法

问题:在使用NDK移植流媒体SDK至Android平台下时,由于在自己的工程下,不能使用Android.mk与Application.mk,直接指定android-ndk-r8b下的交叉编译工具进行编译,结果提示找不到STL相关头文件等一大堆错误,从网上下载了其他版本的NDK工具链也不行,把STL头文件绝对路径加上以及加入了所有STL相关编译选项后还是不能编译通过。后来仔细阅读官网资料,得到一个信息——Android NDK提供了脚本来剥离出单独的toolchain,脚本的名字叫make-standalone-toolchain.sh,其制作出来的工具链不依赖NDK下的环境变量,且支持STL,运用制作出的工具链编译工程代码,问题得到解决,下边将其制作的具体步骤。

             

1. 下载Android NDK

http://developer.android.com/sdk/ndk/index.html

我用的是android-ndk-r8b-linux-x86.tar.bz2

wget http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86.bin

2. 提取toolchain

以参考文档docs/STANDALONE-TOOLCHAIN.html

在linux系统中解压NDK,假设解压到/opt;

# cd /opt/android-ndk-r8b/

# build/tools/make-standalone-toolchain.sh --platform=android-14

# cd android-ndk-r10e

#./build/tools/make-standalone-toolchain.sh --platform=android-14

--toolchain=arm-linux-androideabi-4.9

expr: warning: unportable BRE: `^\\([^\\-].*\\)$': using `^' as the first character

of the basic regular expression is not portable; it is being ignored

expr: warning: unportable BRE: `^\\(--[^=]*\\)=.*$': using `^' as the first character

of the basic regular expression is not portable; it is being ignored

expr: warning: unportable BRE: `^--[^=]*=\\(.*\\)$': using `^' as the first character

of the basic regular expression is not portable; it is being ignored

Auto-config: --toolchain=arm-linux-androideabi-4.6

Copying prebuilt binaries...

Copying sysroot headers and libraries...

Copying libstdc++ headers and libraries...

Creating package file: /tmp/ndk-caiwang213/arm-linux-androideabi-4.6.tar.bz2

Cleaning up...

Done.

有一些警告没有关系,最终得到的是一个压缩包/tmp/ndk-caiwang213/

arm-linux-androideabi-4.6.tar.bz2

3. 安装arm-linux-androideabi-4.6.tar.bz2工具链

# tar jxvf arm-linux-androideabi-4.6.tar.bz2 -C /usr/local

4. 将工具链环境变量加入到/etc/profile文件中

# vi /etc/profile

  在最下边加入一行export PATH=$PATH:/usr/local/standalone-

toolchain-androideabi-4.6/bin

# source /etc/profile

5. Makefile变量设定

CROSS_COMPILER = arm-linux-androideabi-

CFLAGS += -O2 -static

STANDALONE_PATH=/usr/local/standalone-toolchain-androideabi-4.6

INCLUDES += -I$(STANDALONE_PATH)/arm-linux-androideabi/include/c++/4.6/

INCLUDES += -I$(STANDALONE_PATH)/arm-linux-androideabi/include/c++/4.6/arm-linux-androideabi

6.make编译工程,提示

  /usr/local/standalone-toolchain-androideabi-4.6/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/as: /usr/lib/libz.so.1: no version information available (required by /usr/local/standalone-toolchain-androideabi-4.6/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/as)

  但编译可以通过,编译出来的库可以在Android下调用成功

猜你喜欢

转载自my.oschina.net/u/1988725/blog/848069