最近在尝试使用 mongodb 做为服务端持久化方案,服务端程序是使用 c++ 写的,折腾了很多时间,记录一下吧。html
一、下载 boost 1.56.0python
http://www.boost.org/users/history/version_1_56_0.htmlios
二、下载 mongo-cxx-driver-legacy-1.0.2c++
https://github.com/mongodb/mongo-cxx-driver/releases/tag/legacy-1.0.2git
三、还有其它的一些限制条件,如 gcc 4.8.2 ,安装 scons ,python 2.7.9github
四、先升级好 gcc,将注意在 /usr/bin 目录下作好 cc/c++/gcc/g++ 的软连接,且将 libstdc++.so.6 文件复制到 /usr/lib64 目录下;而后安装 boost,将默认安装在 /usr/local/lib/ 目录下的动态库复制到 /usr/lib64 目录下。mongodb
五、解压 mongo-cxx-driver-legacy-1.0.2 进入目录后进行编译:api
scons all -j8
编译后生成的头文件和静态库存放在 build/install/ 目录下,这些都是 mongodb 的 c++ 驱动程序最终须要的。测试
六、编写测试代码 test.cpp :ui
#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
七、遇到了哪些问题?
GCC\BOOST版本太高或太低时,都会有问题,而这个问题是很难排查的,若是自己机器上就存在不一样版本的GCC/BOOST,那么升级时必定要注意顺序:先升级PYTHON,再安装好SCONS,再升级GCC并配置好环境,再用新的GCC去编译BOOST,用新的BOOST彻底替换掉系统中本来存在的BOOST(不然可能编译过了,但运行会出现段错误;或者在连接 boost_thread 时出错,只能连接 boost_thread-mt ,但后者会影响到使用BOOST写的服务端底层的编译)
八、还有一些有待进一步深刻的问题
mongodb 的 c++ 驱动有四个版本(实质上应该是三个),一是咱们如今使用的 legacy 版本;二是 26compat 版本;三是使用 c++11 重写的新版本;四是 mongodb 开源程序中自带了 c++ 驱动,应该是前面三种中的一种。
理论上应该使用 c++11 的新版本,这样或者就能够把GCC/BOOST都升到最高版本,是将来的趋势。但得等有时间才能去折腾了,暂时先这样用着吧。
全部的 mongo-cxx-driver 能够在下面的地址下载:
https://github.com/mongodb/mongo-cxx-driver
九、封装
封装以方便使用,待补充。