由于以往我写过不少使用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. 如何理解JavaScript中的this关键字

    前言 王福朋老师的 JavaScript原型和闭包系列 文章看了不下三遍了,最为一个初学者,每次看的时候都会有一种 "大彻大悟" 的感觉,而看完之后却总是一脸懵逼.原型与闭包 可以 ...

  2. 【状态压缩dp】1195: [HNOI2006]最短母串

    一个清晰的思路就是状压dp:不过也有AC自动机+BFS的做法 Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T ...

  3. 【Java_Spring】RestTemplate发HTTP请求详解

    Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解) Spring RestTemplate提交时设置http header请求头 Spring之RestTempla ...

  4. centos7.4系统部署nodejs前端项目

    1.安装nodejs运行环境 wget命令下载Node.js安装包,该安装包是编译好的文件,解压之后,在bin文件夹中就已存在node和npm,无需重复编译 wget https://nodejs.o ...

  5. centos7重启后/etc/resolv.conf 被还原解决办法

    每次重启服务器后,/etc/resolv.conf文件就被自动还原了,最后发现是被Network Manager修改了. 查看Network Manager服务状态 systemctl status ...

  6. Thinkphp 5 调试执行的SQL语句

    在模型操作中 ,为了更好的查明错误,经常需要查看下最近使用的SQL语句,我们可以用getLastsql方法来输出上次执行的sql语句.例如: User::get(1); echo User::getL ...

  7. java上传附件,批量下载附件(一)

    上传附件代码:借助commons-fileupload-1.2.jar package com.str; import java.io.BufferedInputStream;import java. ...

  8. python将excel数据写入数据库,或从库中读取出来

    首先介绍一下SQL数据库的一些基本操作: 1创建 2删除 3写入 4更新(修改) 5条件选择 有了以上基本操作,就可以建立并存储一个简单的数据库了. 放出python调用的代码: 此处是调用dos 操 ...

  9. HDU - 5884 Sort (二分答案+贪心)

    有n个数字,你需要把这n个数字合成一个数字,每次只能把k个数字合并成一个,花费为这k个数字的和. 给一个最大花费,问不超过这个最大花费的情况下,k的最小值. Sample Input 1 5 25 1 ...

  10. UIAutomator输入中文

    之前一直是英文的测试环境,包括手机也是英文的,app也是英文的,涉及不到中文输入法的东西.但现在在写中文的app,所以需要输入中文.看到网上的解决办法如下: 下载https://github.com/ ...