Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。Boost由于其对跨平台的强调,对标准C++的强调,与编写平台无关。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库。但Boost中也有很多是实验性质的东西,在实际的开发中实用需要谨慎。

在Android的externa库中也可以看到boost库,不过那个只有一部分,并不是完整的Boost。点击浏览

1. 在github上有位大牛写了个NDK编译Boost的脚本,非常傻瓜化:点击浏览

  在项目主页上可以看到该脚本的版本支持情况。

  PS: 没有r9版的信息,但是我测试r9d编译成功,r10编译失败。

  

2. 检出项目,或者直接下载压缩包

$ git clone https://github.com/MysticTreeGames/Boost-for-Android.git

  

  项目非常小,进入项目后发现只有5个文件,并没有Boost库,这是因为Boost库是根据编译时按选择的版本下载的。

  $ cd Boost-for-Android

  $ ls

  

  查看帮助可以看到一些编译选项,解释很详细,这里不罗嗦。

$ ./build-android.sh --help

  

3. 开始编译,当前环境:virtualbox + xubuntu14.04-x86_64

  3.1 android大部分为32位,64位android才刚出不久,所以在64位linux环境下使用ndk需要安装一些库:

$ sudo apt-get install ia32-libs

  

  3.2 这里推荐大家使用 virtualbox + xubuntu + xshell 的环境

  进入vbox安装目录

D:\>cd Program_Files\VirtualBox

  在后台启动xubuntu

D:\Program_Files\VirtualBox>vboxmanage startvm xubuntu-14.04 -type headless

  关闭正在运行的xnbuntu,当然,关机应该使用 $sudo shutdown -h now

D:\Program_Files\VirtualBox>vboxmanage stopvm xubuntu-14.04

  3.3 确保环境都配好,然后开始运行编译脚本,这里选择1.49.0版本,编译到 install 目录:

$ ./build-android.sh --boost=1.49.0 --prefix=install

  

  速度略慢,耐心等待,已经下载好的包,再次编译时不会重复下载,这脚本真心很傻瓜,亏我还写这么多!!!!

  下载完后再经过漫长的等待,就编译完了。。。。。

  

4. 使用Crystax第三方NDK编译Boost

  4.1 对于使用Boost中的序列化功能的请注意了,官方ndk不支持boost-serialization库,原因是ndk不支持wchar_t,所以就需要用到第三方NDK crystax 了。

  crystax下载地址,点击浏览

  根据Boost-for-Android的版本支持情况,这里选择crystax-r7来编译boost-1.49.0,但是你会发现有好多crystax-r7,该用哪一个呢?????

  打开build-android.sh脚本,搜索“crystax”,会发现只有“7-crystax-5.beta3”,那么我们就使用android-ndk-r7-crystax-5.beta3-linux-x86.tar.bz2

$ vi ./build-android.sh

  

  下载完crystax后,修改path,重新编译。

5. 在项目中使用crystax编译的Boost需要注意的事项:

  1. 修改Application.mk中的APP_STL参数:

APP_STL:=gnustl_static

  

博客不在线,有问题直接联系QQ: 783713515

ndk 编译 boost 库,支持serialization的更多相关文章

  1. cocos2dx通过ndk编译c++库

    ndk编译c++库,然后通过jni调用实现重要代码封装,是安卓应用中最常用的技术,一方面可以将重要的代码实现隐藏,防止泄漏,也可以提高打包速度. ndk里面的sample文件夹中有很多实用的例子,其中 ...

  2. 使用android ndk编译boost动态库

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

  3. VS2008编译boost库

    一.下载首先从boost官方主页http://www.boost.org/下载最新版boost安装包,我用的版本是boost.1.49.0二.新建文件夹 如果是使用下载的安装包,那么请将boost安装 ...

  4. Linux下编译boost库和qt和ImageMagick

    需要把整个PCIE的工程移植到Linux下,当初就是用cmake来管理的工程的.但是命令行之类的还是需要改动.改动还不少,cmake里面很多东西都依赖于windows.包括我用cmake重新管理的工程 ...

  5. windows上编译boost库

    要用xx库,编译boost时就指定--with-xx.例如: # 下载并解压boost_1.58 # 进入boost_1.58目录 bjam.exe toolset=msvc-14.0 --build ...

  6. VS2017编译boost库

    1.http://www.boost.org/     下载boost库. 2.解压到 D:\ProgramFiles\boost 3.环境配变量配置     VS2017更加注重跨平台性,安装文件较 ...

  7. 编译 boost 库(win7+boost1.60+vs2008)

    参见:http://blog.csdn.net/u013074465/article/details/42532527 下载boost安装包 https://sourceforge.net/proje ...

  8. windows下编译Boost库

    下载源码 boost_1_66_0.7z 生成编译工具 D:\Project\boost_1_66_0> bootstrap.bat 配置Python环境变量(使用VS2017自带的32位pyt ...

  9. linux下编译Boost库

    下载源码 boost_1_66_0.tar.gz 生成编译工具 # tar axf boost_1_66_0.tar.gz # cd boost_1_66_0 # yum install gcc gc ...

随机推荐

  1. SharePoint 计时器服务无法启动

    摘要: Microsoft SharePoint Server 2010 使用 Windows SharePoint Services 定时 V4 (SPTimerV4) 服务运行大多数系统任务.服务 ...

  2. jquery设置文本框值 与获取文本框的值

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. 转 C#String与string的区别

    C#是区分大小写的,但是我却发现C#中同时存在String与string,于是我很困惑,于是我上网搜索了一下,于是我了解了一些小知识. MSDN中对string的说明:string is an ali ...

  4. iOS进阶:Objective-C runtime(一)

    第一次看到runtime时,觉得太高大上,动态获取方法.属性等简直厉害的不要不要的.在经过查找资料+实践后,发现runtime并没有想象中那么复杂,接下来对runtime进行基本的介绍. 要使用运行时 ...

  5. WindowsService服务程序开发

    Windows服务:Microsoft Windows 服务(即,以前的 NT服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可 ...

  6. js访问 xmldom

    加载XML文档:     var xmlDom = new ActiveXObject("MSXML2.DOMDocument");  xmlDom.load("file ...

  7. ssm+easyUI datagrid 不能显示后台controller层返回的json数据

    后台打印查询出来的数据: {"total":29,"rows":[{"department_id":0,"department_n ...

  8. Python核心编程读笔 8: 文件和输入输出

    第九章 文件和输入输出 一.文件内建函数.方法.属性 1 文件内建函数 file_object = open(file_name, access_mode='r', buffering=-1) 工厂函 ...

  9. 加密传输SSL协议7_SSL协议概述

    SSL(Secure Sockets Layer) SSL的功能,可以在通信的双方中建立一个加密的通信通道 同时还可以确认通信的双方是不是就是其声称的人,防止被钓鱼. SSL在网络协议栈中的位置:可以 ...

  10. 非常值得学习的java 绘图板源代码

    package minidrawpad; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; impor ...