您的位置:首页 > 博客中心 > 数据库 >

mongodb及mongoclient在win7下的编译和使用

时间:2022-03-10 18:08

1、导言

折腾mongodb几个小时终于有结果了。呃!现在就简单总结一下。

其实我的需求很简单,就是在C++代码中调用mongodb的库函数,也就是要得到mongoclient.lib。本来想直接下载个,可在网上也没找到,觉得重新编译也不麻烦,于是就下了源码编译。可下错了源码,编了半天也编不出来,晕!

其实就是参考了网友们的文章,在下载了源码mongodb-src-r2.6.3.zip。编译命令也很简单,大家都说直接输入:scons mongoclient.lib即可,可不断弹出这样的错误:

scons: *** Do not know how to make File target `mongoclient.lib‘ (C:\mongo-maste

#include <iostream> #include <cstdlib> #include <winsock2.h> #include "mongo\client\dbclient.h" using namespace std; void run() { mongo::DBClientConnection con; con.connect("127.0.0.1:27017"); } int main() { WSAData wsaData; if(WSAStartup(MAKEWORD(1,1),&wsaData) != 0) { return -1; } try { run(); cout << "conn ok" << endl; } catch (const mongo::DBException &e) { cout << "caught " << e.what() << endl; } getchar(); return EXIT_SUCCESS; } 在运行之前,不用说,肯定要添加boost和mongoclient的头文件和库文件。注意我添加的都是动态库Lib路径,应该是动态链接的,所以也需要将boost的dll路径和mongoclient-gd.dll路径添加进PATH中,且还要添加ws2_32.lib库,至于boost库和mongoclient库可直接写目录而不用写库名,因为有自动链接机制。

下面就说我的两个重大修改,只是相比于网友们的文件:

1、在dbclient.h头文件之前添加winsock2.h,因为在vs2012中如果不加会报错:"You must include the windows and windows sockets headers before dbclient.h"


2、在main函数开头,我添加了WSAStartup的5行代码,因为如果不添加,在某一个文件中的getAddr调用会异常:"WSAStartup() failed"


不能说常规代码错了,只能说由于各种原因,在这种情况下需要这么做才会编译运行正常。

运行就简单了,首先启动mogod -dbpath d:\data,默认端口在27017,然后启动上面的客户端,输出conn ok。Done !


5、参考网址




热门排行

今日推荐

热门手游