本文引用自 http://blog.csdn.net/jwybobo2007/article/details/8687489
由于以往我写过不少使用boost库开发的项目,而最近准备移植一些代码到android上(上层界面以及jni层我不管,也没研究过,现在只完成代码的移植编译,具体如何调用,由其它人负责),所以先要解决的就是boost库本身的移植问题。
在google上找了一些相关的资料,然后在http://stackoverflow.com上找到一个给力的帖子:
帖子里面大致介绍了怎么装,这里面涉及到一个老外写的脚本工具,用于编译
移植过程相对比较顺利,不过一开始下载的ndk r8d,好像是对glibc的版本有要求,在我这边的centos5.6上编译它自带的sample时,arm-linux-androideabi-ld提示/usr/lib/libstdc++中的glibc版本过低,无法执行链接,可能arm-linux-androideabi-ld依赖高版本的库,有时间更新一下再看看,oh my god!不过我没去管它,因此系统里还有ndk r8,下面就说一下编译过程。
1.下载安装ndk
我用的r8,放置在 /usr/local/src/android-ndk-r8
注册环境变量(第一句必须执行):
export NDK_ROOT=/usr/local/src/android-ndk-r8
export PATH=$NDK_ROOT:$PATH
2.下载boost-for-android工具
git clone git://github.com/madadam/Boost-for-Android.git
它里面包含了boost的补丁以及编译脚本,该工具放置在 /usr/local/src/Boost-for-Android
3.下载boost_1.49.0
上述工具目前只支持到为1.49打补丁,另外boost-for-android的脚本本身带有下载boost压缩包的功能,但是天朝的速度。。。你懂的,还是自己用下载工具下比较快
将下载完的boost_1.49.0.tar.bz放置在/usr/local/src/Boost-for-Android
4.开始编译
切换目录至/usr/local/src/Boost-for-Android
运行:
./build-android.sh --boost=1.49.0 $NDK_ROOT
如果不出意外将会编译成功,其它编译选项可以自行查看
生成的文件位于 /usr/local/src/Boost-for-Android/build
5.测试demo
我从boost的sample中抽了一个出来进行编译测试(./boost_1_49_0/libs/asio/example/allocation/server.cpp)
在任意位置新建 jni 文件夹,放入server.cpp,并创建Android.mk,编写内容如下:
- LOCAL_PATH := $(call my-dir)
- BOOST_VERSION := 1_49
- PROJECT_ROOT := $(LOCAL_PATH)
- BOOST_INCLUDE_PATH := /usr/local/src/Boost-for-Android/build/include/boost-1_49
- BOOST_LIB_PATH := /usr/local/src/Boost-for-Android/build/lib
- # Path and name of the STL library. Add this to the *end* of LOCAL_LDLIBS.
- # Note this is a hack/workaround to prevent linker errors when compiling with
- # boost.
- STL_LIBS := -L$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/libs/armeabi \
- -lgnustl_static
- include $(CLEAR_VARS)
- LOCAL_MODULE := boost_test
- LOCAL_C_INCLUDES:= $(BOOST_INCLUDE_PATH) \
- $(PROJECT_ROOT)
- LOCAL_SRC_FILES := server.cpp
- LOCAL_LDLIBS := -llog
- # The order of these libraries is often important.
- LOCAL_LDLIBS += -L$(BOOST_LIB_PATH) \
- -lboost_system-gcc-mt-$(BOOST_VERSION) \
- -lboost_thread-gcc-mt-$(BOOST_VERSION)
- # $(STL_LIBS)
- include $(BUILD_EXECUTABLE)
再创建 Application.mk 内容如下:
- APP_STL := gnustl_static
- APP_CPPFLAGS += -frtti -fexceptions
完成后执行 ndk-build