mysql 导出bson格式_[c++,bson]bson 的安装与使用

本片文章主要介绍的是如何在 linux 环境下面安装并使用 bson

bson 的正确安装和使用必须要有如下几个前提条件作为支撑:

1. boost 在系统中正确的安装与配置

2. autotools 在系统正常工作

前两个条件满足之后,便可以使用 bson 了

3. 编写程序调用 bson 库函数1. boost的安装与配置

1.1 首先到官网下载最新的 boost 的安装包,在这里不推荐使用 apt,yum install 等方式安装

因为我们需要boost 的静态链接库,*.a 这样的库文件,使用自动安装的话,无法控制

安装的路径和生成的库的格式。

[命令]wgethttp://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.tar.gz/download

1.2 将安装包在指定的路径下面进行解压

[命令] tar -xzf boost_1_58_0.tar.gz

1.3 编写自动安装编译脚本

在解压之后生成的文件夹 boost_1_58_0 的上一层目录中创建文件

[命令] touch boost_install.sh

点击(此处)折叠或打开

#!/bin/bash

machine=`uname -m | grep '64'`

if [ a"$machine" == "a" ] ; then

bitlevel=32

else

bitlevel=64

fi

cd boost_1_58_0

./bootstrap.sh --prefix=/usr/local/boost

./bjam link=static threading=multi variant=release \

address-model=$bitlevel toolset=gcc runtime-link=static

修改 boost_install.sh 的权限,

[命令] chmod 755 boost_install.sh运行安装脚本

[命令] ./boost_install.sh

等待编译结束之后,就会在 boost_1_58_0/stage/ 文件夹的下面找到刚才编译生成的静态库文件 *.a

静态库文件是我们编译使用 bson 库所需要的,所以 boost 安装编译执行到这个程度即可,

如果你想编写程序以动态链接的方式调用 boost 库的话,

不推荐这种静态编译的方法。毕竟此方法是为 bson 的安装与编译做铺垫的,仅仅是 boost 源码安装中的一种方法,其他方式安装具体看官网的介绍

2. 使用 autotools 来静态编译 bson 库

2.1 首先先来介绍一下 autotools

autotools 是为了统一定制生成 Makefile 而开发的由一系列工具组成的一套自动编译工具,

其中包括 autoscan , aclocal , autoconf , autheader , automake 在这里不介绍其运行的原理,仅仅介绍一下使用方法

2.2 autotools 的使用方法

2.2.1 首先编写测试文件 Main.cpp 就是简单的 hello world 的程序,这个并不是重点,

重点是后续步骤中如何编译 bson 库文件,也就是待到所有的流程都执行正确之后,

我们在向 hello world 中引入 bson 库并且调用 bson 库中的方法

点击(此处)折叠或打开

#include

int main ( int argc , char ** argv )

{

printf ("hello world \n") ;

return 0 ;

}

2.2.1 执行 autoscan , 这个命令会根据当前路径下面的 .cpp .h .hpp 文件中引入的库函数或是库的头文件推导出

这一系列文件中,会使用到哪些库,根据用到的库会生成一个 configure.scan 文件 ,

这个文件时我们要进行修改的文件

2.2.2 修改 configure.scan 文件,将修改之后的文件重新命名为 configure.in

点击(此处)折叠或打开

// configure.in

# -*- Autoconf -*-

# Process this file with autoconf to produce a configure script.

#modified by Aimer :

#this line means final executable file name , it can be consideredas the project name

AC_INIT(Hello_World)

#add by Aimer :

#this line means in this project I will add third party libs

#such as bson , boost and so on

AC_USE_SYSTEM_EXTENSIONS

#add by Aimer : AM_INIT_AUTOMAKE(project name , version id)

AM_INIT_AUTOMAKE(Hello_World, 1.0)

#entry function file

AC_CONFIG_SRCDIR([Main.cpp])

AC_CONFIG_HEADERS([config.h])

# Checks for programs.

AC_PROG_CXX

# add by Aimer

AC_PROG_CC

#modified by Aimer: we want finally output Makefile

AC_OUTPUT(Makefile)

2.2.3 执行命令 aclocal

执行该命令以后会生成 autom4te.cache ,不过这个东西一般情况下都不看的

2.2.4 继续执行命令 autoconf

执行该命令以后会生成 configure 这个可执行文件

2.2.5 继续执行命令 autoheader

执行该命令之后会生成 configure.h.in

2.2.6 创建文件 Makefile.am 这个是用来静态编译 bson 库的重要编译文件,

autotools 中的 automake 会根据 Makefile.am 中的文法格式来根据编译环境定制的生成 Makefile 文件

Makefile.am 文件如下所示

点击(此处)折叠或打开

AUTOMAKE_OPTIONS=foreign

bin_PROGRAMS=Hello_World

BSON_SRC_PATH=/unixC/Bson/bson/src

BOOST_LIB_PATH=/unixC/Boost/boost_1_58_0

#what source files Hello_World needs ?

Hello_World_SOURCES=\

Main.cpp \

$(BSON_SRC_PATH)/bsonobj.cpp $(BSON_SRC_PATH)/util/json.cpp \

$(BSON_SRC_PATH)/oid.cpp $(BSON_SRC_PATH)/lib/base64.cpp \

$(BSON_SRC_PATH)/lib/md5.cpp $(BSON_SRC_PATH)/lib/nonce.cpp

Hello_World_CXXFLAGS=\

-I$(BOOST_LIB_PATH) -I$(BSON_SRC_PATH) -D_FILE_OFFSET_BITS=64 \

-ggdb -Wall -O0

Hello_World_LDADD=\

-lpthread -lm -lboost_system -lboost_thread \

-lboost_thread -lboost_program_options -lrt

Hello_World_LDFLAGS=\

-fPIC -rdynamic -L$(BOOST_LIB_PATH)/stage/lib -pthread

2.2.7 继续执行命令 automake --add-missing

执行命令结束之后,生成文件  depcomp ,Makefile.in  等等, 最重要的是 Makefile.in ,有它便说明一切顺利

2.2.8 继续执行命令

./configure CXXFLAGS= CFLAGS=

执行命令结束之后,基于 Makefile.in 生成文件 Makefile ------> 这个便是我们最终想要的

2.2.9 继续执行命令

make

执行命令结束之后,生成可执行文件 Hello_World

2.2.10 运行可执行文件 Hello_World

./Hello_World

执行命令输出 "hello world"

到这里,所有的流程均正确,下面为了方面调用,我们来写一个 build.sh j脚本,同时向 Main.cpp 文件中

先引入 bson 库的头文件,然后添加 bson 中的对象,调用对象自带的方法。

3. 使用 bson 库中的函数

创建 build.sh 文件,文件内容如下

点击(此处)折叠或打开

#!/bin/sh

autoscan #scan all sub-program , justify which libraries program will need

#configure.scan

cp configure.scan configure.in

aclocal

autoconf

autoheader

automake --add-missing

./configure CXXFLAGS= CFLAGS=

make

可以按照如下的步骤一点点的来测试 bson 库

1. 仅仅在 Main.cpp 文件中添加一个头文件 "#include " , 然后执行 ./build.sh 脚本 ------> 发现一些正常

2. 在 Main.cpp 文件中添加 "using namespace bson ;" 命名空间的引用 , 然后执行 ./build.sh 脚本 --------> 发现一些正常

3. 在 Main.cpp 文件中的 入口函数 main 中创建对象

点击(此处)折叠或打开

#include

#include

#include

#include

#include

using namespace bson ;

int main ( int argc ,char **argv )

{

BufBuilder bson(1) ;

bson.appendStr("hello Aimer") ;

std::cout<< bson.len() << std::endl;

printf ("hello Aimer \n") ;

return 0;

}

修改之后,调用脚本文件对该源文件进行重写的编译、链接.. ./build.sh

然后再次执行文件 ./Hello_World

输出如下内容

12

hello Aimer

这边说明一切运行都正确了,这里仅仅做过测试实验,没有涉及过多的细节,具体 bson 中的使用方法可参看后续博客。

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值