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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 1、导言 折腾mongodb几个小时终于有结果了。呃!现在就简单总结一下。 其实我的需求很简单,就是在C++代码中调用mongodb的库函数,也就是要得到mongoclient.lib。本来想直接下载个,可在网上也没找到,觉得重新编译也不麻烦,于是就下了源码编译。可下错了源码,编了半天也编不出来,晕! 其实就是参考了网友们的文章,在这里下载了源码mongodb-src-r2.6.3.

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
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、测试

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

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

代码如下:

#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、参考网址

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

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

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

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
NoSQL MongoDB 数据库
MongoDB的安装与配置(简单版本、Win7)
MongoDB的安装与配置(简单版本、Win7)
673 0
MongoDB的安装与配置(简单版本、Win7)
|
NoSQL MongoDB 数据安全/隐私保护
win7安装mongodb4.0.10
从mongodb官网下载mongodb-win32-x86_64-2008plus-ssl-4.0.10.zip将zip解压并命名成d:mongodb新建D:mongodbdata, D:mongodblogs两个文件夹cmd进入D:mongodbbin目录输入mongod --dbpath D:.
1205 0
|
1月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
2月前
|
存储 NoSQL 关系型数据库
非关系型数据库-MongoDB技术(二)
非关系型数据库-MongoDB技术(二)
|
2月前
|
NoSQL 关系型数据库 MongoDB
非关系型数据库-MongoDB技术(一)
非关系型数据库-MongoDB技术(一)
|
11天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
12天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。
|
13天前
|
存储 NoSQL MongoDB
MongoDB 数据库引用
10月更文挑战第20天
9 1