1、导言

折腾mongodb几个小时最终有结果了。呃。如今就简单总结一下。

事实上我的需求非常easy,就是在C++代码中调用mongodb的库函数。也就是要得到mongoclient.lib。本来想直接下载个,可在网上也没找到,认为又一次编译也不麻烦,于是就下了源代码编译。可下错了源代码,编了半天也编不出来,晕!

事实上就是參考了网友们的文章,在这里下载了源代码mongodb-src-r2.6.3.zip。

编译命令也非常easy,大家都说直接输入:scons mongoclient.lib就可以,可不断弹出这种错误:

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

r\mongoclient.lib). Stop.

结果不知道怎么发现mongoclient.lib在新版本号中不再是target了,已经移到了还有一个源代码mongo-cxx-driver-legacy.zip中了,地址在这里。只是,在mongo-src中,像mongo,mongod还是直接能够编译成功的。貌似不须要boost库

2、准备工作

2.1 下载安装mongo-win32.msi

为了节约时间,我就直接下载了相关exe文件像mogo.exe,mogod.exe

2.2 依次安装python,scons,boost

具体信息可參考我给出的链接地址。我就强调一些我发现的:

2.2.1 有人说mongoclient仅仅链接boost静态库,我发现不是这样。当指定--dynamic-windows,--sharedclient參数后。须要给出boost动态lib库文件夹,而非*-s.lib

2.2.2 当未指定指定--dynamic-windows,--sharedclient參数时。貌似不用给出boost库文件夹,我也不太确定,反正我是没给出像libboost_date_time-vc110-mt-s-1_53.lib等文件的路径

3、编译mongoclient

从vs2012命令行中进入mongo-cxx-driver-legacy文件夹,运行:

scons install-mongoclient --cpppath=boost头文件路径

结果在build\install\lib直接生成libmongoclient-s.lib,128M

当然也可添入--dynamic-windows,--sharedclient,--dbg等參数。可生成相应的动态库,包含调试版和发行版。

具体说明可看这里。结果我的文件夹里有下面文件:

说实话。我是真没搞清楚这些文件的差别。我已经凌乱了……

4、測试

我不得不说。这一步也走得真悬,竟有两个重要步骤被我猜准了。。

本来代码非常easy,就连接上mongod.exe进程开启的server即可。也不知道怎么回事。网友们都没有我说得那两个步骤。莫非是新版本号更新的问题,抑或我忽视了一些东西?

代码例如以下:

#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,默认port在27017,然后启动上面的client,输出conn ok。Done !

5、參考网址

http://blog.csdn.net/mniwc/article/details/8590528

http://ppgunjack.iteye.com/blog/985904

http://database.51cto.com/art/201106/272526.htm

mongodb及mongoclient在win7下的编译和使用的更多相关文章

  1. Win7下VS2008编译QtiPlot

    Win7下VS2008编译QtiPlot By wangsh 2011-11-25 QtiPlot 是一款开源免费的科学绘图软件,可运行在多个平台(windows.Linux等)中,从功能上讲,Qti ...

  2. Win7下静态编译QT5.12源码

    官方参考文档:https://doc.qt.io/qt-5/build-sources.html CSDN博客:https://blog.csdn.net/GG_SiMiDa/article/deta ...

  3. 终于解决了一个Win7 下 VS 编译的问题,困扰了我好几个月

    用 Win7 一年多了,一直在这个环境下编程,其他都挺好,就是有个问题非常恶心,在VS下编译经常出现进程正在使用,无法覆盖的错误,这个问题我记得博问中以前也有其他人遇到过,也没有解决掉.此问题困扰了我 ...

  4. MXNet在64位Win7下的编译安装

    注:本文原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) 我笔记本配置比较低,想装个轻量级的MXNet试试,装完之后报错,不是有效的应用程序,找不到 ...

  5. Zookeeper源码编译为Eclipse工程(win7下Ant编译)

    前言 ZooKeeper是雅虎的.用Ant进行软件构建. 千里之行,始于足下.想看源码的第一步,是下载源码并导入某个IDE工具. Ant http://ant.apache.org/ Windows: ...

  6. win7下cmake编译opencv2.3.1生成opencv—createsamples.exe和opencv_haartrainingd.exe

    第一步:下载安装cmake,之后进行默认安装即可,这步略过. 第二步:配置cmake ,使cmake找到opencv进行编译安装 watermark/2/text/aHR0cDovL2Jsb2cuY3 ...

  7. win7下VS2010编译python3

    转自:http://www.cnblogs.com/fortwo/archive/2013/04/16/3023871.html 1.首先从python.org上:http://www.python. ...

  8. win7下vs2008编译出现C1859错误的处理办法

    昨天,电脑上安装的vs2008 sp1版本编译工程时候出了这样的错了:fatal error C1859: 'Debug\**.pch'.清理并重新编译会临时解决问题,但问题仍然会频发.后面上网找资料 ...

  9. Zookeeper源代码编译为Eclipseproject(win7下Ant编译)

    为了深入学习ZooKeeper源代码,首先就想到将其导入到Eclispe中,所以要先将其编译为Eclispeproject. 1.什么是Ant??? Apache Ant™ Apache Ant is ...

随机推荐

  1. LintCode: Maximum Subarray

    1. 暴力枚举 2. “聪明”枚举 3. 分治法 分:两个基本等长的子数组,分别求解T(n/2) 合:跨中心点的最大子数组合(枚举)O(n) 时间复杂度:O(n*logn) class Solutio ...

  2. Ubuntu IntelliJ IDEA 注冊碼與Gradle相關

    一.Ubuntu IntelliJ IDEA 注冊碼 在线免费生成IntelliJ IDEA 15.0(16.+)注册码 注冊參考:https://www.iteblog.com/idea/ 依次选择 ...

  3. C++ 第八课 标准c字符和字符串

    atof() 将字符串转换成浮点数 atoi() 将字符串转换成整数 atol() 将字符串转换成长整型数 isalnum() 当字母或数字字符时, 返回真值 isalpha() 当字母字符时, 返回 ...

  4. 这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解)(转)

    前言 在Andrroid开发中,网络请求十分常用 而在Android网络请求库中,Retrofit是当下最热的一个网络请求库 今天,我将献上一份非常详细Retrofit v2.0的使用教程,希望你们会 ...

  5. C++比较特殊的构造函数和初始化语法

    C++的构造函数 看Qt创建的示例函数, 第一个构造函数就没看懂. 是这样的 Notepad::Notepad(QWidget *parent) : QMainWindow(parent), ui(n ...

  6. Makefile 和 CMakeLists.txt

    Makefile Makefile 的格式 target: prerequisites [tab]command 例子 #Makefile all:chap1 chap2 chap1: - - - : ...

  7. 安装win和xp双系统 若干问题

    装了winxp和linux双系统,后先在winxp下手动格式化了linux系统,后启动时提示grub错误,重新分区后系统也 2010-09-17 21:07 [清风剑] | 分类:Linux | 浏览 ...

  8. Git 经常使用命令合集

    ====== Git 经常使用命令合集 ====== === 1.Git 文档 ===     Git 中文文档观看地址:http://git.oschina.net/progit/      === ...

  9. CSS的子选择器与后代选择器的区别

    来源于:http://www.jianshu.com/p/599654ba5f4a 子选择器: 一个比较有用的选择器子选择器,即大于符号(>),用于选择指定标签元素的第一代子元素.如右侧代码编辑 ...

  10. Android 圆角输入框

        draweable文件下建立一个名字为shape的XML文件:   <shape xmlns:android="http://schemas.android.com/apk/r ...