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

來源:互聯網
上載者:User

標籤:mongodb

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及mongoclient在win7下的編譯和使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.