vs2010连接mongodb服务器,X64位
这个东西真是耗费了很多时间和精力,中间出现好多错误,把英文的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 codecs codecs.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中加入:
也可以在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; } # elseinline 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。
总结
以上是生活随笔为你收集整理的vs2010连接mongodb服务器,X64位的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 64位 vs2010 和 opencv
- 下一篇: 可能是堆被损坏,这也说明 XX.exe