编译mongodb C++驱动 windows

来源:互联网 发布:tgp网络出口不稳定 编辑:程序博客网 时间:2024/06/03 18:34

这个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到程序的运行目录,真是麻烦啊。