这个mongodb 的C++ 驱动着实费了我一番功夫,不过终于成功跑通了。
首先,下载驱动源代码:http://dl.mongodb.org/dl/cxx-driver 我在这里下载 2.4版本
安装 scons
下载python2.7并安装,添加环境变量
下载scons , 添加环境变量,注意这里的环境变量是 ...\Python27\Scripts
安装boost ,教程很多。
比如:http://www.cnblogs.com/wondering/archive/2009/05/21/boost_setup.html
注意这里的 boost 版本我们选择 1.49.0,方便起见,我是全部安装的,安装完成之后 除了boost , stage , doc 这三个目录其余全部删除,这个时候大小约1.6G,远没有5G那么大,好多obj文件都是编译的中间文件
之所以选择 1.49.0有如下原因:
boost在1.5以后就将TIME_UTC改为了TIME_UTC_,mongodb 用的绝对不高于1.49.0
官网上说Boost 1.49 source is now included directly in version 2.1.1+,在2.1.1 之后就内部包含1.49 了。显然 2.4 应该用 1.49 的boost ,虽然驱动的源代码没有包含。这是后话。
boost版本太低的话 会出现 Compiling Filesystem version 3 file with BOOST_FILESYSTEM_VERSION defined != 3 因为 1.49 以后 Filesystem version就是3 了。
安装完boost之后,我们修改 mongodb driver 的源代码:
打开 根目录下的SConstruct 25行 处修改 BUILD_DIR='c:/boost_1_49_0', 这里的boost路径为 你自己机子上的路径,我的放在C盘根目录下
不同的版本可能行数不一样 ,我的是 2.4.3 这个办法就是 把编译目录改为 boost的路径,会在boost路径下 生成 mongo文件夹,编译完成删了就行。
直接编译的话,还会提示错误,text.h # if !defined(_UNICODE) 把前边的# 去掉。
然后cmd 进入下载的源码 根目录 ,scons
等待几分钟,会在根目录下生成 mongoclient.lib。
vs中加入 附加包含目录 ,附加库目录,注意这里 需要加上boost 和mongodb的
另外还需要,在链接里边 加入输入
mongoclient.lib
Dbghelp.lib
Ws2_32.lib
进入vs 输入测试代码
#include <iostream>
#include "mongo/client/dbclient.h"
using namespace std;
int main()
{
try
{
DBClientConnection conn;
conn.connect("127.0.0.1:27017");
cout << "connect OK" << endl;
}
catch(mongo::DBException &e)
{
cout << e.what() << endl;
}
}
运行,成功,但这仅仅是 release 静态 版本的编译成功,如果要编译debug版本的 就需要用到整个源代码了
http://www.cnblogs.com/geosky/archive/2013/05/05/VS2010-MongoDB-Cpp-Driver.html
值得注意的是,这个方法编译成功后 依然会有许多 boost 链接的问题 ,这个我的解决办法是 手动加入
#pragma comment(lib, "boost_filesystem-vc100-mt-1_49.lib")
并且拷贝 缺少的boost dll到程序的运行目录,真是麻烦啊。