支持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,运用制做出的工具链编译工程代码,问题获得解决,下边将其制做的具体步骤。html

             

1. 下载Android NDKlinux

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

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

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

 

2. 提取toolchainide

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

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

# cd /opt/android-ndk-r8b/google

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

 

# 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下调用成功

相关文章
相关标签/搜索