由于以往我写过不少使用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,编写内容如下:
 
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
此时你应该已经编译成功,祝贺

使用android ndk编译boost动态库的更多相关文章

  1. 【转载】cocos2dx 中 Android NDK 加载动态库的问题

     原文地址:http://blog.csdn.net/sozell/article/details/10551309 cocos2dx 中 Android NDK 加载动态库的问题 闲聊 最近在接入各 ...

  2. windows android studio 编译Jni动态库

    项目需要,折腾了半天搞定windows android studio环境编译Jni动态库,现记录下来. 准备安装环境: 1. android studio 下载地址是http://www.androi ...

  3. 使用android ndk编译x86 so在linux下使用的问题

    一直以为android ndk编译x86 so库可以在linxu下运行,结果我试了几次都行不通.后来想了一下,android ndk编译的库应该只能在android设备或模拟器上运行才有效,后来改用 ...

  4. ndk 编译 boost 库,支持serialization

    Boost库是一个可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一. Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容.在C+ ...

  5. Android导入第三方静态库.a编译成动态库.so

    http://ikinglai.blog.51cto.com/6220785/1324985 在Android开发的时候,经常会使用到用c或c++编写的第三方的静态库.如果有源码的话,可以直接跟你自己 ...

  6. android NDK编译(导入).a文件和编译多个so文件(转)

    源:android NDK编译(导入).a文件和编译多个so文件 一.编译一个静态库 libstatic_android.a LOCAL_PATH := $(call my-dir) include ...

  7. Android NDK编译之undefined reference to 'JNI_CreateJavaVM'

    利用Android NDK编译动态库,在C文件中调用了两个JNI函数:JNI_GetDefaultJavaVMInitArgs和JNI_CreateJavaVM.编译的时候始终报以下错误: XXX: ...

  8. 如何在WINDOWS下编译BOOST C++库 .

    如何在WINDOWS下编译BOOST C++库 cheungmine 2008-6-25   写出来,怕自己以后忘记了,也为初学者参考.使用VC8.0和boost1.35.0.   1)下载boost ...

  9. 表格树控件QtTreePropertyBrowser编译成动态库(设计师插件)

    目录 一.回顾 二.动态库编译 1.命令行编译动态库和测试程序 2.vs工具编译动态库和测试程序 3.安装文档 4.测试文档 三.设计师插件编译 1.重写QDesignerCustomWidgetIn ...

随机推荐

  1. tensorflow目标检测API安装及测试

    1.环境安装配置 1.1 安装tensorflow 安装tensorflow不再仔细说明,但是版本一定要是1.9 1.2 下载Tensorflow object detection API  下载地址 ...

  2. python中文件操作的六种模式及对文件某一行进行修改的方法

    一.python中文件操作的六种模式分为:r,w,a,r+,w+,a+ r叫做只读模式,只可以读取,不可以写入 w叫做写入模式,只可以写入,不可以读取 a叫做追加写入模式,只可以在末尾追加内容,不可以 ...

  3. i2c_drivers个人分析

    \arch\arm\mach-mx6\board-mx6q_sabresd.c static struct i2c_board_info i2c_board_info_rtc[] __initdata ...

  4. bash脚本编写基础

    bash脚本编程     命令的堆砌     脚本程序:解释器解析执行     shell:交互式接口,编程环境         shell:能够提供一些内部命令,并且能通过PATH环境变量找到外部命 ...

  5. 在ionic项目中使用极光推送实现推送 & 服务器端代码

    ionic start -a jPushDemo -i com.lawxin.fengkong jpushdemo blank meteor add cordova:cn.jpush.phonegap ...

  6. Python中的魔术方法详解(双下方法)

    介绍 在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”,中文称『魔术方法』,例如类的初始化方法 __init__ ,Python中所有的魔术方法均在官方文档中 ...

  7. jcenter maven 库

    先了解compile ‘com.squareup.okhttp:okhttp:2.4.0’的意义 首先我们要了解compile ‘com.squareup.okhttp:okhttp:2.4.0’这一 ...

  8. 【USACO09FEB】 庙会班车 Fair Shuttle 贪心+线段树

    Although Farmer John has no problems walking around the fair to collect prizes or see the shows, his ...

  9. SpringMVC对于跨域访问的支持

    原文地址:http://docs.spring.io/spring/docs/5.0.0.RC2/spring-framework-reference/web.html#mvc-introductio ...

  10. 九度oj 题目1411:转圈

    题目描述: 在一个有向图有n个顶点(编号从1到n),给一个起点s,问从起点出发,至少经过一条边,回到起点的最短距离. 输入: 输入包括多组,每组输入第一行包括三个整数n,m,s(1<=n< ...