boost 與mongodb

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/xikema/archive/2009/04/04/4049159.aspx

http://www.cnblogs.com/daizhj/archive/2011/03/07/1973764.html

 

 

考慮到mongodb使用了boost庫源碼,參考mongodb官方文檔後,下載編譯boost版本是1.42(時間爲2010-2-2)或更新版本:

boost版本1.42:
http://sourceforge.net/projects/boost/files/boost/1.42.0/boost_1_42_0.zip/download

下載boost源碼之後,我把boost解壓在D盤。

1.在D:/boost_1_42_0/下找到該批處理文件bootstrap.bat,以vs2010命令行方式運行它,並最終生成bjam.exe可執行文件(詳細結果及錯誤信息見生成的bjam.log日誌)

2.將生成的bjam.exe文件拷貝到“D:/boost_1_42_0”目錄下,運行下面命令行
bjam stage variant=debug --stagedir="d:/boost_1_42_0" --with-filesystem --with-thread --with-date_time --with-program_options --layout=versioned threading=multi toolset=msvc-10.0

如下圖:


注:i.如果要生成release鏈接庫文件,需將上面的variant設置成release,形如:
bjam stage variant=release .....
ii.如果要全部生成使用下面編譯選項
bjam ...... --build-type=complete

編譯過程可能會用一些時間,最終會在"D:/boost_1_42_0" 生成一個lib目錄,裏面包括剛生成的庫文件。

3.下載已用vs2010編譯的SpiderMonkey庫文件及源碼包,並將其解壓到D盤下,下載鏈接:
https://github.com/dwight/vc2010_js

將該文件夾名稱改爲“js”(因爲mongodb項目會默認指定該路徑尋找可用的lib及c源文件),如下圖:



說明:SpiderMonkey是由C語言操作的JavaScript引擎,它支持JS1.4和ECMAScript-262規範。該引擎分析、編譯和執行腳本,根據JS數據類型和對象的需要進行內存分配及釋放操作。目前它是Mozilla項目的一部分。可通過下面鏈接瞭解更多信息:
https://developer.mozilla.org/en/SpiderMonkey
源碼下載鏈接:
https://developer.mozilla.org/En/SpiderMonkey/Getting_SpiderMonkey_source_code
另外如何使用spidermonkey參見:
http://www.ibm.com/developerworks/cn/linux/shell/js/js_engine/

4.接下來下載並解壓mongod源碼包(本人下載的是其最新版本:r1.8.0-rc1),這裏我將其也解壓在了D盤:

mongodb-src-r1.8.0-rc1:
https://github.com/mongodb/mongo/zipball/r1.8.0-rc1

之後利用vs2010打開 D:/mongodb-mongo-4d2aeb6/db目錄下的解決方案文件“db_10.sln”, 加載之後的視圖如下:



在其中的mongod項目上,點擊鼠標右鍵,打開"屬性"對話框, 在“配置屬性”-“c++目錄”-"包含目錄"中點“編輯”:

添加對上面的boost源碼文件路徑的包含:


設置庫文件目錄選項中添加對剛編譯的boost庫的路徑"D:/boost_1_42_0/lib"聲明,如下圖:



在C/C++常規--“附加包含目錄”,中添加"D:/boost_1_42_0"聲明,如下圖:

 


 

5.因爲我的機器是32位系統,而下載的mongodb項目設置爲64位,所以要修改一下編譯方式,如下圖


一切就緒後,開始編譯,時間比較長,耐心等待...

注:如出現“pch.h文件無法打開”的錯誤信息時,只要在VS2010中的開該文件即可。

6.如果要調試的話,打開“項目屬性”--“配置屬性”--“調試”--“命令參數”,輸入如下參數 :

"--dbpath d:/mongodb/db" "--port 27017"

 


然後找出db.cpp文件,將斷點放在如下函數的第一行代碼處:

 

int main(int argc, char* argv[])


如下圖:



需要說明的是,我一開始使用的是VS2008,但mongodb源碼在最新版本中好像就不再提供vs2008的項目文件了,另外我使用vs2008也一直沒有成功編譯過mongodb,不是缺文件就是鏈接庫編譯時有問題(google一下,發現國外同行也被類似問題困擾)。所以大家也就不要再VS2008編譯上浪費時間了。

 

好了,到這裏主要的內容介紹完了,大家可以通過調試來分析觀察MONGODB代碼的執行流程了。

 

參考鏈接:
http://www.cnblogs.com/wondering/archive/2009/05/21/boost_setup.html
http://www.cnblogs.com/xdotnet/archive/2008/03/22/boost_install_config.html
http://www.mongodb.org/display/DOCS/Building+with+Visual+Studio+2010

 

 

 

 

bjam --toolset=msvc --stagedir=./lib_x86 --builddir=./ address-model=32 link=shared runtime-link=shared threading=multi stage debug release

bjam --toolset=msvc --stagedir=./lib_x86 --builddir=./ address-model=32 link=static runtime-link=shared threading=multi stage debug release

 

bjam --toolset=msvc --stagedir=./lib_x86 --builddir=./ address-model=32 link=static runtime-link=static

threading=multi stage debug release

 


--build-dir=<builddir>
 
編譯的臨時文件會放在builddir裏(這樣比較好管理,編譯完就可以把它刪除了)
 


--stagedir=<stagedir>
 
存放編譯後庫文件的路徑,默認是stage
 


--build-type=complete
 
編譯所有版本,不然只會編譯一小部分版本(確切地說是相當於:variant=release, threading=multi;link=shared|static;runtime-link=shared)
 


variant=debug|release
 
決定編譯什麼版本(Debug or Release?)
 


link=static|shared
 
決定使用靜態庫還是動態庫。
 


threading=single|multi
 
決定使用單線程還是多線程庫。
 


runtime-link=static|shared
 
決定是靜態還是動態鏈接C/C++標準庫。
 


--with-<library>
 
只編譯指定的庫,如輸入--with-regex就只編譯regex庫了。
 


--show-libraries
 
顯示需要編譯的庫名稱

不使用系統的cmd使用編譯器自己的cmd

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章