vs2010连接mongodb服务器,X64位

来源:互联网 发布:域名的别名 编辑:程序博客网 时间:2024/04/30 19:40

 

 这个东西真是耗费了很多时间和精力,中间出现好多错误,把英文的mongodb和boost仔细看了好几遍,可算是弄出来了。

http://docs.mongodb.org/manual/reference/connection-string/

http://www.boost.org/doc/libs/1_54_0/more/getting_started/windows.html

 

一、scons,python,SpiderMonkey, boost与mongodb的关系

借鉴http://blog.csdn.net/mniwc/article/details/8590528
1.scons
scons是一个Python写的自动化构建工具,同linux的make工具功能相似。与之关联的SConstruct文件也即类似make工具的makefile文件,
描述了编译和链接的内容和方式。在这里就是用scons这个工具来编译生成mongoclient.lib的(而不是用vs)。
2.python
Python是一种面向对象、直译式计算机程序设计语言。因为scons是用python写的那就肯定要用到它的库啦,所以在scons之前先装python.
3.SpiderMonkey
一个用C语言实现的JavaScript脚本引擎,mongodb的数据类型格式是bson,而bson是json的二进制形式的存储格式,
json是JavaScript使用的数据类型。mongodb是支持javascript脚本语言进行操作的,所以就需要一个JavaScript脚本引擎了
也就是这个SpiderMonkey了。
4.boost
 一个很强大的C++库,mongodb是用C++写,使用到了这个库,所以需要它。


二、生成mongoclient.lib

windows下编码mongodb客户端需要自已先编译生成一个mongoclient.lib,也即连接mongodb服务器所需要的C++接口类库。

1、下载安装python,版本必须要>=2.4且<3.0(因为scons只有在python这些版本才能用)。

这个不用多说,安装路径如:C:\Python27

2、下载安装scons.(需要python,所以要先安装python)
将C:\Python27\Scripts添加到PATH中

http://sourceforge.net/projects/scons/files/scons/2.2.0/

下载scons,scons解压scons-2.2.0为止,将其拷贝出来,路径如:E:\mongodb-install\scons-2.2.0

cmd下cd E:\mongodb-install\scons-2.2.0

python setup.py install进行scons的安装。

scons 安装时出现问题:(这个问题记不清了)

LookupError: unknown encoding: cp65001:

这是python的编码问题,python中没有定义cp65001编码,不识别。

要在出现问题的文件中加入:

import codecscodecs.register(lambda name: name == 'cp65001' and codecs.lookup('utf-8') or None)

这样就能把cp65001编码映射成utf-8编码。

3、下载安装boost。

下载boost_1_49_0版本。

将其解压,文件夹重命名为boost,放于C:\boost下

(据说编译mongoclient.lib的默认搜索路径为C:\boost,但是实际操作根本没有搜到,还是要自己添加)

打开Visual Studio Command ,如下图中visual studio 命令提示(2010):

cd C:\boost;

输入bootstrap,等待其生成Boost构建工具bjam。

在命令行输入bjam toolset=msvc-10.0 variant=debug,release threading=multi link=static。然后等待安装完成。如果要生成64位库,键入命令bjam toolset=msvc-10.0 variant=debug,release threading=multilink=static runtime-link=static address-model=64。

注意红色的字,不过不这样输入,会生成shared模式,当编译mongoclient.lib时好多lib找不到,如

LINK : fatal error LNK1104: 无法打开文件“libboost_thread-vc100-mt-s-1_49.lib

 

安装完成后,屏幕上会提示"The Boost C++ Libraries were successfully built!"。并制定头文件和库文件目录。

头文件要include : C:\boost

生成的库文件在C:\boost\stage\lib下

 

4、下载mongodb的C++ driver
http://dl.mongodb.org/dl/cxx-driver/

下载mongodb-linux-x86_64-v2.4-latest.tar,一直解压到mongo-cxx-driver-v2.4,放置路径为:E:\mongodb-install\mongo-cxx-driver-v2.4

 

5、下载SpiderMonkey。
  这个链接是编程好的用于vs2010的https://github.com/dwight/vc2010_js,

建一个与mongodb同级目录js存放下载的文件

 

6、下载mongodb

 将下载的mongodb放于C:\mongo文件下。不需要下源代码,下window64位的就可以了。以后的操作会在mongodb下生产lib和include。

下载mongodb C++ driver将其层层解压到mongo-cxx-driver-v2.2,将其拷贝到目录

E:\mongodb-install\mongo-cxx-driver-v2.2下,目录如下:

省略部分;

cd到该目录下运行scons mongoclient.lib来准备生成mongoclient.lib

出现错误:

说明boost路径配置不对。

 配置boost路径,打开E:\mongodb-install\mongo-cxx-driver-v2.2\SConstruct文件,可以看到

AddOption("--extrapath",          dest="extrapath",          type="string",          nargs=1,          action="store",          help="comma separated list of add'l paths  (--extrapath /opt/foo/,/foo) static linking")AddOption("--prefix",          dest="prefix",          type="string",          nargs=1,          action="store",          default="/usr/local",          help="installation root")

可以选择添加的--prefix为mongodb的路径,--extrapath就是用到的boost库的路径

可以运行程序的时候在cmd中加入:

E:\mongodb-install\mongo-cxx-driver-v2.2>scons --prefix c:\mongodb --extrapath C:\boost,C:\boost\stage

也可以在SConstruct文件中加入

env.Append(CPPPATH=["C:/boost"], LIBPATH=["C:/boost/stage/lib"])

可能会出错:

提示text.h(89):#error temp error

这是因为scons没带使用 Unicode 字符集的参数,于是就默认使用多字节字符集

我们打开\mongo-cxx-driver-v2.2\src\mongo\util下的text.h文件

/* like toWideString but UNICODE macro sensitive */# if !defined(_UNICODE)#error temp error     inline std::string toNativeString(const char *s) { return s; }# else    inline std::wstring toNativeString(const char *s) { return toWideString(s); }# endif

将#error temp error加双斜线注释掉 //#error temp error

可是输入后出错:

这些无法解析的外部符号包含在WS2_32.lib,Dbghelp.lib中,在SConstruct文件中加入

env.Append(LIBS=['WS2_32','Dbghelp'])

 

这些错误就没有了,但是出现一个很奇怪的问题

本来是要生成mongoclient.lib的,却说没有找到mongoclient.lib中止生成。

后来想起来之前有人说把E:\mongodb-install\mongo-cxx-driver-v2.2\src文件夹下的SConscript.client

中的一处

mongoclient_install = env.Install('#/', [        mongoclient_lib,        #env.SharedLibrary('mongoclient', clientSource),        ])

里面中的env.SharedLibrary('mongoclient', clientSource)前面的“#”去掉,当时就去掉了,

刚把这个#又加进去了,现在编译生成了mongoclient.lib。

 

原创粉丝点击