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

转载于:https://my.oschina.net/u/1988725/blog/848069

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值