问题:在使用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下调用成功