天天看點

mongodb及mongoclient在win7下的編譯和使用

1、導言

折騰mongodb幾個小時終于有結果了。呃!現在就簡單總結一下。

其實我的需求很簡單,就是在c++代碼中調用mongodb的庫函數,也就是要得到mongoclient.lib。本來想直接下載下傳個,可在網上也沒找到,覺得重新編譯也不麻煩,于是就下了源碼編譯。可下錯了源碼,編了半天也編不出來,暈!

scons: *** do not know how to make file target `mongoclient.lib' (c:\mongo-maste

r\mongoclient.lib). stop.

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

mongodb及mongoclient在win7下的編譯和使用

說實話,我是真沒搞清楚這些檔案的差別,我已經淩亂了……

4、測試

我不得不說,這一步也走得真懸,竟有兩個重要步驟被我猜準了。。

本來代碼很簡單,就連接配接上mongod.exe程序開啟的伺服器就行,也不知道怎麼回事,網友們都沒有我說得那兩個步驟,莫非是新版本更新的問題,抑或我忽視了一些東西?

代碼如下:

在運作之前,不用說,肯定要添加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、參考網址

<a target="_blank" href="http://blog.csdn.net/mniwc/article/details/8590528">http://blog.csdn.net/mniwc/article/details/8590528</a>

<a target="_blank" href="http://ppgunjack.iteye.com/blog/985904">http://ppgunjack.iteye.com/blog/985904</a>

<a target="_blank" href="http://database.51cto.com/art/201106/272526.htm">http://database.51cto.com/art/201106/272526.htm</a>

繼續閱讀