下载好NDK后,
命令行将toolchain 生成好:
我的配置:
set ARCH_TYPE=arm
set API_TYPE=21
Python27\python.exe %ANDROID_NDK_HOME%/build/tools/make_standalone_toolchain.py --force --arch=%ARCH_TYPE% --api=%API_TYPE% --stl=gnustl --install-dir=%ANDROID_STANDALONE_TOOLCHAIN%
然后是使用CMAKE 编译我们需要使用的C++程序并生成so。编译命令如下:
cmake -G "MinGW Makefiles" . -DOUTDIR=%OUTDIR% -DPLATFORM=%PLATFORM% -DBUILD_TYPE=%BUILD_TYPE% -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DCMAKE_TOOLCHAIN_FILE=%ANDROID_CMAKE_HOME%/android.toolchain.cmake -DCMAKE_MAKE_PROGRAM=%ANDROID_STANDALONE_TOOLCHAIN%/bin/make
cmake --build . --config %BUILD_TYPE%
我遇到目前最大的坑:
class vector_iterator
{
const type* _Sel;
}
这个竟然编不过,报错 expected unqualified-id before numeric constant, 各种找资料,查百度,有的说少分号,有的说没实现方法,但是这个工程是在Windows 和linux都编译过了,仅仅是在编译Andriod的相关版本才报错,最后无意间将名称改成小写,竟然编译通过了。
可能和编译选项或者相关语法特性有关,暂时不知所以然,只查到了相关小写命名的Andriod建议。
进过查找与多次重试,发现跟模版有一定关系:模版内使用 "_" + 大写字母定义 成员指针会产生以上错误,貌似是调用到了模版的其他地方去了,必须饭stl源码才知道。