mongodb 与 c++ 的配合使用

  最近在尝试使用 mongodb 作为服务端持久化方案,服务端程序是使用 c++ 写的,折腾了不少时间,记录一下吧。

1、下载 boost 1.56.0

http://www.boost.org/users/history/version_1_56_0.html

 

2、下载 mongo-cxx-driver-legacy-1.0.2

https://github.com/mongodb/mongo-cxx-driver/releases/tag/legacy-1.0.2

 

3、还有其它的一些限制条件,如 gcc 4.8.2 ,安装 scons ,python 2.7.9

 

4、先升级好 gcc,将注意在 /usr/bin 目录下做好 cc/c++/gcc/g++ 的软链接,且将 libstdc++.so.6 文件复制到 /usr/lib64 目录下;然后安装 boost,将默认安装在 /usr/local/lib/ 目录下的动态库复制到 /usr/lib64 目录下。

 

5、解压 mongo-cxx-driver-legacy-1.0.2 进入目录后进行编译:

scons all -j8

编译后生成的头文件和静态库存放在 build/install/ 目录下,这些都是 mongodb 的 c++ 驱动程序最终需要的。

 

6、编写测试代码 test.cpp :

#include <iostream>
#include "mongo/client/dbclient.h"

int main() {
    try
    {
        mongo::DBClientConnection conn;
        conn.connect("127.0.0.1");
        std::cout<<"connected ok"<<std::endl;
    } catch(mongo::DBException &e)
    {
        std::cout <<e.what()<<std::endl;
    }
}

  编译此测试代码的命令为:

g++ test.cpp -I include/ -L lib/ -lmongoclient -lboost_system -lboost_regex -lboost_thread

  注意,此处省略了一些简单的细节,如 include 目录下存放了 mongo 和 boost 的头文件,lib 目录下存放了后面指明的四个链接库。

  更多使用方法,请参考官方资料:https://github.com/mongodb/mongo-cxx-driver/wiki/Tutorial

  详细的API,请参考:http://api.mongodb.org/cxx/legacy-1.0.0/namespacemongo.html

  

 

7、遇到了哪些问题?

  GCC\BOOST版本过高或过低时,都会有问题,而这个问题是很难排查的,如果本身机器上就存在不同版本的GCC/BOOST,那么升级时一定要注意顺序:先升级PYTHON,再安装好SCONS,再升级GCC并配置好环境,再用新的GCC去编译BOOST,用新的BOOST完全替换掉系统中原本存在的BOOST(否则可能编译过了,但运行会出现段错误;或者在链接 boost_thread 时出错,只能链接 boost_thread-mt ,但后者会影响到使用BOOST写的服务端底层的编译)

 

8、还有一些有待进一步深入的问题

  mongodb 的 c++ 驱动有四个版本(实质上应该是三个),一是我们现在使用的 legacy 版本;二是 26compat 版本;三是使用 c++11 重写的新版本;四是 mongodb 开源程序中自带了 c++ 驱动,应该是前面三种中的一种。

  理论上应该使用 c++11 的新版本,这样或者就可以把GCC/BOOST都升到最高版本,是未来的趋势。但得等有时间才能去折腾了,暂时先这样用着吧。

  所有的 mongo-cxx-driver 可以在下面的地址下载:

https://github.com/mongodb/mongo-cxx-driver

 

9、封装

  封装以方便使用,待补充。

 

posted @ 2015-05-18 13:51  轻典  阅读(8630)  评论(0编辑  收藏  举报