天天看點

VS2010編譯Boost,MongoDB

Boost編譯

1,編譯Boost.Build Engine ,生成b2.exe

#進入解壓根目錄
cd boost_1_55_0 
bootstrap
           

編譯完成生成b2.exe

2,編譯boost庫

b2 --stagedir="D:\Builds\Boost\boost_1_55_0\lib\vc10"  link=static runtime-link=shared threading=multi debug   release --build-dir="D:\Builds\Boost\boost_1_55_0\build"   msvc stage
           

b2和bjam是相同的,具體參數可以使用b2 –help檢視。可指定參數隻編譯指定庫。

3,生成的boost庫名稱解析

BOOST_LIB_PREFIX + BOOST_LIB_NAME + "-" + BOOST_LIB_TOOLSET + "-" + BOOST_LIB_THREAD_OPT + "-" + BOOST_LIB_RT_OPT + "-" + BOOST_LIB_VERSION
           
  • BOOST_LIB_PREFIX: 靜态庫為 “lib” (否則無,是用動态連結庫)
  • BOOST_LIB_NAME: 庫的基本名稱 ( 比方說 boost_regex).
  • BOOST_LIB_TOOLSET: 編譯工具集名稱 ( 比如:vc6, vc7, bcb5 )
  • BOOST_LIB_THREAD_OPT: 多線程為 “-mt” ,否則為空
  • BOOST_LIB_RT_OPT: 訓示使用的運作庫的字尾,

    組合下面的一個或者更多字元:

    • s 靜态運作庫,指的是靜态連結到運作時庫(不出現表示動态).
    • g 調試/診斷 runtime (release if not present).
    • d 調試版本 (不出現表示 release 版 ).
    • p STLPort 版本.

      注:對 vc 來說,gd 總是一起出現

  • BOOST_LIB_VERSION: Boost 版本, Boost 版本 x.y 表示為 x_y形式.

4,link和runtime-link組合分析

Link和Runtime-link的作用

(1)Link

生成動态/靜态連結庫,動态連結庫使用shared,靜态連結庫使用static。一般boost庫|都可以用static方式編譯,最終釋出程式帶着boost的dll比較累贅。

(2)Runtime-link

動态/靜态連結C/C++運作時庫,也有static和shared兩種。runtime-link和link總共可以産生4中組合方式。

組合結果

序号 link runtime-link 生成庫字尾 備注
1 static static libboost_date_time-vc120-mt-sgd-1_56.lib,libboost_date_time-vc120-mt-s-1_56.lib
2 static shared libboost_date_time-vc120-mt-gd-1_56.lib,libboost_date_time-vc120-mt-1_56.lib
3 shared static 無法編譯
4 shared shared boost_date_time-vc120-mt-gd-1_56.dll(lib),boost_date_time-vc120-mt-1_56.dll(lib)
5 預設 預設 同2
6 –build-type=complete 以上所有

MongoDB編譯

1,環境準備

  • 下載下傳并編譯Boost(>=1.49)
  • Python(2.x)

    安裝Python,并将Python/Script加到path路徑。

  • Scons

    安裝依賴Python環境。

  • Git

    下載下傳源碼:git clone -b legacy https://github.com/mongodb/mongo-cxx-driver.git

2,編譯mongodb驅動

全版本編譯:

-- 靜态連結 生成libmongoclient-s.lib (Relesae)
scons -- --prefix=<install-path> --cpppath=<path-to-boost-headers> --libpath=<path-to-boost-libs> install --dynamic-boost=off
-- 靜态連結 生成libmongoclient-sgd.lib (Debug)
scons -- --prefix=<install-path> --cpppath=<path-to-boost-headers> --libpath=<path-to-boost-libs> install --dbg=on --dynamic-boost=off

-- 動态連結 生成libmongoclient.lib(runtime dynamic,link static)和mongoclient.lib,mongoclient.dll(Release)
scons -- --prefix=<install-path> --cpppath=<path-to-boost-headers> --libpath=<path-to-boost-libs> install --dynamic-windows --sharedclient --dynamic-boost=off
-- 動态連結 Debug
scons -- --prefix=<install-path> --cpppath=<path-to-boost-headers> --libpath=<path-to-boost-libs> install --dynamic-windows --sharedclient --dbg=on
           

Remark : windows系統上路徑要使用反斜線或者雙斜線。使用runtime dynamic ,link static 的方式編譯連結可以通過,但是運作時出現意料之外的結果。auth校驗無法通過。

-- runtime dynamic ,link static 
libmongoclient.lib 
libmongoclient-gd.lib

-- runtime static ,link  static 
libmongoclient-s.lib   
libmongoclient-sgd.lib

-- runtime dynamic ,link static 
mongoclient.dll
mongoclient.exp
mongoclient.lib
mongoclient.pdb
mongoclient-gd.dll
mongoclient-gd.exp
mongoclient-gd.lib
mongoclient-gd.pdb
           

3,靜态連結mongodb

預編譯頭使用

STATIC_LIBMONGOCLIENT

繼續閱讀