vs2010连接mongodb服务器,X64位
?
?這個東西真是耗費了很多時間和精力,中間出現(xiàn)好多錯誤,把英文的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的關(guān)系
借鑒http://blog.csdn.net/mniwc/article/details/8590528
1.scons
scons是一個Python寫的自動化構(gòu)建工具,同linux的make工具功能相似。與之關(guān)聯(lián)的SConstruct文件也即類似make工具的makefile文件,
描述了編譯和鏈接的內(nèi)容和方式。在這里就是用scons這個工具來編譯生成mongoclient.lib的(而不是用vs)。
2.python
Python是一種面向?qū)ο?、直譯式計算機程序設(shè)計語言。因為scons是用python寫的那就肯定要用到它的庫啦,所以在scons之前先裝python.
3.SpiderMonkey
一個用C語言實現(xiàn)的JavaScript腳本引擎,mongodb的數(shù)據(jù)類型格式是bson,而bson是json的二進制形式的存儲格式,
json是JavaScript使用的數(shù)據(jù)類型。mongodb是支持javascript腳本語言進行操作的,所以就需要一個JavaScript腳本引擎了
也就是這個SpiderMonkey了。
4.boost
?一個很強大的C++庫,mongodb是用C++寫,使用到了這個庫,所以需要它。
二、生成mongoclient.lib
windows下編碼mongodb客戶端需要自已先編譯生成一個mongoclient.lib,也即連接mongodb服務(wù)器所需要的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 安裝時出現(xiàn)問題:(這個問題記不清了)
LookupError: unknown encoding: cp65001:
這是python的編碼問題,python中沒有定義cp65001編碼,不識別。
要在出現(xiàn)問題的文件中加入:
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下
(據(jù)說編譯mongoclient.lib的默認搜索路徑為C:\boost,但是實際操作根本沒有搜到,還是要自己添加)
打開Visual Studio Command ,如下圖中visual studio 命令提示(2010):
cd C:\boost;
輸入bootstrap,等待其生成Boost構(gòu)建工具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時好多l(xiāng)ib找不到,如
LINK : fatal error LNK1104: 無法打開文件“l(fā)ibboost_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下生產(chǎn)lib和include。
下載mongodb C++ driver將其層層解壓到mongo-cxx-driver-v2.2,將其拷貝到目錄
E:\mongodb-install\mongo-cxx-driver-v2.2下,目錄如下:
省略部分;
cd到該目錄下運行scons mongoclient.lib來準備生成mongoclient.lib
出現(xiàn)錯誤:
說明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 字符集的參數(shù),于是就默認使用多字節(jié)字符集
我們打開\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'])?
這些錯誤就沒有了,但是出現(xiàn)一個很奇怪的問題
本來是要生成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)前面的“#”去掉,當時就去掉了,
剛把這個#又加進去了,現(xiàn)在編譯生成了mongoclient.lib。
?
總結(jié)
以上是生活随笔為你收集整理的vs2010连接mongodb服务器,X64位的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 64位 vs2010 和 opencv
- 下一篇: 可能是堆被损坏,这也说明 XX.exe