使用android ndk编译boost库

本文引用自  http://blog.csdn.net/jwybobo2007/article/details/8687489

由于以往我写过不少使用boost库开发的项目,而最近准备移植一些代码到android上(上层界面以及jni层我不管,也没研究过,现在只完成代码的移植编译,具体如何调用,由其它人负责),所以先要解决的就是boost库本身的移植问题。

在google上找了一些相关的资料,然后在http://stackoverflow.com上找到一个给力的帖子:

http://stackoverflow.com/questions/14036311/official-boost-library-support-for-android-and-ios/14089965#comment19511559_14089965

帖子里面大致介绍了怎么装,这里面涉及到一个老外写的脚本工具,用于编译

移植过程相对比较顺利,不过一开始下载的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,编写内容如下:

[cpp]  view plain copy
  1. LOCAL_PATH := $(call my-dir)  
  2. BOOST_VERSION      := 1_49  
  3. PROJECT_ROOT       := $(LOCAL_PATH)  
  4. BOOST_INCLUDE_PATH := /usr/local/src/Boost-for-Android/build/include/boost-1_49  
  5. BOOST_LIB_PATH     := /usr/local/src/Boost-for-Android/build/lib  
  6.   
  7. # Path and name of the STL library. Add this to the *end* of LOCAL_LDLIBS.  
  8. # Note this is a hack/workaround to prevent linker errors when compiling with   
  9. # boost.   
  10. STL_LIBS := -L$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/libs/armeabi \  
  11.                     -lgnustl_static  
  12.   
  13. include $(CLEAR_VARS)  
  14. LOCAL_MODULE    := boost_test  
  15. LOCAL_C_INCLUDES:= $(BOOST_INCLUDE_PATH) \  
  16.                    $(PROJECT_ROOT)  
  17.   
  18. LOCAL_SRC_FILES := server.cpp  
  19. LOCAL_LDLIBS    := -llog  
  20.   
  21. # The order of these libraries is often important.  
  22. LOCAL_LDLIBS += -L$(BOOST_LIB_PATH)     \  
  23.                 -lboost_system-gcc-mt-$(BOOST_VERSION)  \  
  24.                 -lboost_thread-gcc-mt-$(BOOST_VERSION)    
  25.                # $(STL_LIBS)  
  26.   
  27. include $(BUILD_EXECUTABLE)  

再创建 Application.mk 内容如下:

[cpp]  view plain copy
  1. APP_STL := gnustl_static  
  2. APP_CPPFLAGS += -frtti -fexceptions  

完成后执行  ndk-build


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值