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