-D_REENTRANT
注意调整 ANDROID_NDK 的路径
这里使用android-ndk-r11c ,所以用的是android4.9
在boost_1_64_0 文件夹下新建 Android.mk 写入
LOCAL_PATH:= $(call my-dir)
#LOCAL_CPPFLAGS += –fexceptions
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_system
LOCAL_SRC_FILES:= android/lib/libboost_system.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_serialization
LOCAL_SRC_FILES:= android/lib/libboost_serialization.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_wserialization
LOCAL_SRC_FILES:= android/lib/libboost_wserialization.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
3. 项目打包
打开jni/Android.mk 添加
LOCAL_WHOLE_STATIC_LIBRARIES += boost_system
LOCAL_WHOLE_STATIC_LIBRARIES += boost_serialization
$(call import-module, boost_1_64_0)
编译报错:
则要在 jni/Application.mk 文件中添加 ,
APP_CPPFLAGS += -fexceptions (添加异常支持 LOCAL_CPPFLAGS += –fexceptions)
编译到boost::serialization报错,
参考
http://stackoverflow.com/questions/15479136/how-to-implement-mbtowc-for-android-or-ideally-how-not-to
在cpp文件里加入代码,替代那些没定义的函数
#ifdef ANDROID
int wctomb(char *s, wchar_t wc) { return wcrtomb(s,wc,NULL); }
int mbtowc(wchar_t *pwc, const char *s, size_t n) { return mbrtowc(pwc, s, n, NULL); }
#endif
在网上找了好多关于
android
如何
编译
和使用
boost
的文章,不时过时,就是行不通。花了些时间研究了这个问题,所以整理如下。由于文笔有限,大家在使用过程有问题,欢迎多交流。
Android
NDK:
android
-ndk-r7-crystax-5.beta3
( http://www.crystax.net/en/download)
Boost
For
Android
:
有个
android
项目上需要使用到
boost
标准c++
库
,
Boost
库
是一个可移植、提供源代码的C++
库
,作为标准
库
的后备,是C++标准化进程的发动机之一,所以想将其移植到
android
系统上进行
编译
。
直接从网上下载
boost
1.52版本,然后写makefile。。。进行
编译
,,碰到无数的
编译
错误。求助于google网络,终于发现一个好东东:
一个通过NDK
编译
boost
代码的git项
git clone https://github.com/moritz-wundke/
Boost
-for-
Android
.git
2、切到
Boost
项目内,修改build-
android
.sh
其中的下载链接可能已经失效,我们将其替换为可下载的版本链接
需要替换的内容:
http://dl.bintray.com/
boost
org/release/$
BOOST
_VER1.$
BOOST
_VER2.$
BOOST
_VER3/sou
开源项目:https://github.com/MysticTreeGames/
Boost
-for-
Android
编译
注意点:
1.NDK只能用老的,项目文档有说明,我下的是r8e版本
2.
windows
安装cygwin,设置NDK环境
3.执行build-
android
.bat $NDK,这个$NDK不能用/cydrvier/e之类的,必须用e:/