需要編譯的boost庫
以下的庫必須單獨編譯:
Boost.Chrono | Boost.System |
Boost.Context | Boost.ProgramOptions |
Boost.Filesystem | Boost.Python |
Boost.GraphParallel | Boost.Regex |
Boost.IOstreams | Boost.Serialization |
Boost.Locale | Boost.Signals |
Boost.Log | Boost.Thread |
Boost.MPI |
Boost.Timer Boost.Wave |
具有可選的單獨編譯的一些庫:
Boost.DateTime
有一個二進制組件,在使用其to_string/from_string或序列化功能時才需要
Boost.Graph
有一個二進制組件,在您打算分析GraphViz文件時才需要
Boost.Math
具有TR1和C99 cmath函數的二進制組件
Boost.Random
有一個二進制組件,在你使用random device時需要它。
Boost.Test
可以在“僅標題”或“單獨編譯”模式下使用,雖然單獨編譯建議嚴格使用。
Boost.Exception
爲32位MSC_VER==1310和_MSC_VER==1400提供了非浸入性的exception_ptr實現,它需要一個單獨編譯的二進制文件,由BOOST_ENABLE_NON_INTRUSIVE_EXCEPTION_PTR啓用
編譯步驟:
打開cmd命令窗口,找到boost目錄,運行命令:booststrap.bat
命令運行完畢後boost目錄產生下列文件:
使用bjam.exe(或b2.exe)來編譯boost,這兩個exe作用是一樣的,bjam.exe是老版本,b2是bjam的升級版本
例如:
bjam stage --toolset=msvc-9.0 --without-python --stagedir="E:\Sdk\boost\bin\vc9" link=static runtime-link=shared runtime-link=static threading=multi debug release
bjam參數說明:
stage/install
stage表示只生成庫(dll和lib),install還會生成包含頭文件的include目錄
--toolset
指定編譯器,可選的如borland、gcc、msvc(vc6)、msvc-9.0(vs2008)等。
--stagedir=<stagedir>
存放編譯後庫文件的路徑,默認是stage
--bulid-type=complete
編譯所有版本,不然只會編譯一小部分版本(相當於:variant=release,threading=multi;link=shared|static;runtime-link=shared)
--without
--with
選擇不編譯/編譯哪些庫,如輸入--with-regex就只編譯regex庫,默認是全部編譯,顯示需要編譯的庫名稱命令bjam --show-libraries.
--build-dir
編譯的臨時文件會放在builddir裏(編譯完就可以把它刪除了)
link=static|shared
使用靜態庫還是動態庫
threading=single|multi
使用單線程還是多線程庫
runtime-link=static|shared
是靜態還是動態鏈接c/c++標準庫
bjam編譯:
如果想使用默認配置,則直接在cmd執行以下命令:b2.exe,大約經過30分鐘的時間,編譯成功如下:
庫命名規則說明:
lib:在windows上,只有普通的靜態庫使用lib前綴;導入庫和DLL不使用
boost_XXX:所有boost庫名文件以boost_xxx開頭
-vc142:toolset標記;標識了構建該庫所用的toolset和版本
-mt:threading標記;標識構建該庫啓用了多線程支持,不支持多線程的庫沒有-mt。
g:使用標準庫和運行時支撐庫的調試版本
d:構建代碼的調試版本
s:靜態鏈接到C++標準庫和編譯器運行時支撐庫
y:使用Python的特殊調試構建
p:使用STLPort標準庫而不是編譯器提供的默認庫
n:使用STLPort已被棄用的“native iostreams”
-1_67:版本標記;完整的boost發佈號,下劃線代替點
.lib:擴展名:取決於操作系統,在大多數unix平臺上,.a是靜態庫,.so是共享庫。在Windows上,.dll表示共享庫,.lib是靜態庫或導入庫。
VS配置庫目錄:
右鍵項目-》屬性:
指定附加依賴項:
或者使用命令:
#pragma comment(lib, "libboost_date_time-vc142-mt-x32-1_67.lib")