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、封装
封装以方便使用,待补充。
mongodb 与 c++ 的配合使用的更多相关文章
- MongoDB与php的配合使用 【windows版】
通过学习了如何使用和部署MongoDB,尝试了一下如何将mongodb应用到php的程式中去. 1.预备工作 首先得准备好mongodb,并按照相关方法部署以及服务能正常运行中. 对于初学者,可以参考 ...
- docker-compose部署mongodb+redis遇到的问题
Demo环境下需要用到Redis+mongodb两种DB配合使用,所以暂时直接使用docker的redids和mongodb镜像,用docker-compose进行联合部署 使用的版本如下: dock ...
- 【翻译】MongoDB指南/引言
[原文地址]https://docs.mongodb.com/manual/ 引言 MongoDB是一种开源文档型数据库,它具有高性能,高可用性,自动扩展性 1.文档数据库 MongoDB用一个文档来 ...
- MongoDB数据库的CURD的一些基本语句
from:http://www.data321.com/shujuku/20160514417/addToSetQianMianBuXuYaoJinXing 插入文档: SQL语句: INSERT I ...
- 放养的小爬虫--豆瓣电影入门级爬虫(mongodb使用教程~)
放养的小爬虫--豆瓣电影入门级爬虫(mongodb使用教程~) 笔者声明:只用于学习交流,不用于其他途径.源代码已上传github.githu地址:https://github.com/Erma-Wa ...
- MongoDB配置文件YAML-based选项全解
配置文件部分 MongoDB引入一个YAML-based格式的配置文件.2.4版本以前的仍然兼容. 我的mongodb配置文件: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- MongoDB学习笔记——数据库安装及配置
MongoDB数据库安装 MongoDB官方下载地址:https://www.mongodb.com/download-center 首先需要根据Windows版本选择正确的MongoDB版本进行安装 ...
- MongoDB基本操作命令
由于工作需要,笔者这两天使用了一下MongoDB.真的很不习惯!但是确实好用,命令比mysql和sqlserver简单很多.在这里整理一些MongoDB的基本操作命令分享出来. 客户端的安装就不说了, ...
- Mongodb查询的用法,备注防止忘记
最近在用这个东西,为防止忘记,记下来. 集合简单查询方法 mongodb语法:db.collection.find() //collection就是集合的名称,这个可以自己进行创建. 对比sql语句 ...
随机推荐
- 【poj3084】 Panic Room
http://poj.org/problem?id=3084 (题目链接) 题意 一个房子里面有m个房间,一些房间之间有门相连,而门的开关只在一个房间有,也就是说只有一个房间可以控制该扇门的开关.现在 ...
- 【uoj261】 NOIP2016—天天爱跑步
http://uoj.ac/problem/261 (题目链接) 题意 给出一棵树,给出一些起点和终点,没走一条路径耗费时间1,每个节点上有一个权值w,问有多少条路径经过这个节点时所用的时间恰好是w. ...
- Bzoj3004 吊灯
Time Limit: 10 Sec Memory Limit: 128 MB Submit: 72 Solved: 46 Description Alice家里有一盏很大的吊灯.所 ...
- STM32的12864液晶串行控制
发现12864只有主函数中不断刷新才有数据显示,,原因是写指令和写数据中没有加延时,加一个延时就好了.
- .Net和C#的理解
.Net是一个微软出品的开发平台,不仅仅是适用于Windows操作系统,还适用于mono,Linux等等, .Net库包括两部分:部分库定义了一些基本类型.CTS(common Type System ...
- iOS开发者账号配置进行设备调试
PS:我特么写了这么久,居然图片消失了,服了. 问题一:苹果开发者账号类型: 分为三种:个人的(99美金一年).组织的(99美金一年)和企业账号(299美金一年),申请时需要信用卡,可以找淘宝的代理申 ...
- [iOS OpenCV错误解决]
(编译使用O-C会出现错误:<list> not found) (未添加系统库会出现的错误:undefined symbols for architecture armv7) iOS工程调 ...
- git本地分支
1. 新建并切换到该分支 $ git checkout -b iss53 Switched to a new branch 'iss53' 相当于: $ git branch iss53$ git c ...
- BZOJ2186: [Sdoi2008]沙拉公主的困惑
传送门 常规数论题,利用欧拉函数的相关性质. 题求$[1,N!]$中与$M!$互质的数的个数,且$M \leq N$.然后根据欧拉函数的相关性质很容易得出这道题的答案为$\frac{\phi (M!) ...
- 回调函数通俗解析(之前看了很久都不理解,今天终于ok啦)
自学jquery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速google之,发现原来中文翻译成回调.也就是回调函数了.不懂啊,于是在google回调函数,发现网上的中文解释实在是 ...