編譯 boost 庫的步驟:
- 從官網下載最新版本的 boost 庫(目前最新版本為:boost_1_63_0);下載地址:http://www.boost.org/users/download/
- 解壓下載的包(boost_1_63_0.7z)。(假設解壓到:F:\Download\Chrome\boost\boost_1_63_0)
- 打開 Visual Studio 2013 Tools 之 VS2013 開發人員命令提示 工具
- 將目標切換到 F:\Download\Chrome\boost\boost_1_63_0 目標
- 執行 bootstrap.bat。執行完成后,會生成:b2.exe、bjam.exe、bootstrap.log、project-config.jam 四個文件,其中 b2.exe 與 bjam.exe 都是用來編譯 boost 庫的兩個工具。它們功能一樣,bjam.exe 是老版本的,b2.exe 是升級版本的
- 執行 b2 stage --toolset=msvc-12.0 --stagedir="F:\Download\Chrome\boost\boost_1_63_0\bin\vc12" link=static runtime-link=shared runtime-link=static threading=multi debug release 執行完成后,會在 F:\Download\Chrome\boost\boost_1_63_0 目標下生成 bin 目錄以及 bin.v2 目錄。其中 bin 目標是保存最終編譯好的各種 lib 庫。(命令中的各參數意義,可參閱:http://www.cnblogs.com/zhcncn/p/3950477.html)
使用 boost 庫步驟:
- 將下載解壓后的 boost 庫包中的 boost 目錄(即:F:\Download\Chrome\boost\boost_1_63_0\boost 目錄)拷貝到工程相應位置處。(如:Boost\boost_1_63_0 目錄下,即最終:Boost\boost_1_63_0\boost)。注意:boost 目錄為 boost 源文件目錄
- 將前面編譯生成的 bin\vc12\lib 目錄下的 lib 庫拷貝到工程目錄。(如:Jacc.Kim\JK\lib\Debug)。提示:Jacc.Kim 目錄是個人解決方案所在的目錄。注意:bin\vc12\lib 目錄下的100多個lib文件中並不需要全部拷貝,只需要拷貝自己工程需要用到的庫即可。比如:如果只想使用 date_time 庫,則只需要拷貝:libboost_date_time-vc120-mt-gd-1_63.lib 庫即可。但是有些庫是有依賴於其他的一些庫的,此時,將需要將那些依賴的庫一並拷貝過來。比如:asio 則依賴於 libboost_system-vc120-mt-gd-1_63.lib 庫,如果在使用 asio 時,有用到 regex,則還需要拷貝:libboost_regex-vc120-mt-gd-1_63.lib。如果有用到多線程,則還需要:libboost_thread-vc120-mt-gd-1_63.lib、libboost_chrono-vc120-mt-gd-1_63.lib 等等。具體需要什么庫,在工程鏈接時,有缺失的話,系統會提示,只需要照着去找到那些需要的庫,並拷貝過來即可。
- 設置工程:屬性 -> 配置屬性 -> C/C++ -> 附加包含目錄 增加:$(SolutionDir)Boost\boost_1_63_0 以及 $(SolutionDir)Boost\boost_1_63_0\boost
- 設置工程:屬性 -> 配置屬性 -> 鏈接器 -> 附加庫目錄 增加 $(SolutionDir)JK\lib\$(Configuration)。重點說明:此處設置好附加庫目錄即可,無需像其他靜態庫那樣,還要設置 附加依賴項 中指定具體 libboost_xxx_vc12_-xxx.lib,具體原因,應該是編譯時,使用的是 runtime_link=share,即:boost 庫間的鏈接是動態鏈接的緣故
- 之后就可以在工程中使用具體的 boost 庫了
編譯 boost 庫時必需要注意的問題:
- 如果編譯的是 vs2010 版本的,則目前並沒有發現什么問題,使用也正常。按前面的編譯命令編譯后,所有的 130 多個 lib 庫,均全部正確生成
- 如果編譯的是 vs2013 版本的,則請確保有更新 vs2013 update 5 補丁包。如果沒有更新該補丁包,則只有其中的部分 lib 庫可以使用,有些庫則有可能使用過程中會出現(自己的)工程編譯不過的情況。比如:在未更新 update 5 補丁包時,使用 date_time 庫時,可正常使用。使用 asio 功能時,如果用到 boost::asio::write() 功能時,則會出現 common_type.hpp 編譯不過。提示:msc1.cpp 第 1325 行編譯不過。稍微查看一下 common_type.hpp 中的源碼,大致就能明白問題原因在於:編譯時,使用了 c++11 新特性之可變模板參數特性,說明:如果沒更新 vs2013 update 5 則編譯器對 c++11 新特性的功能支持並不全面。因此需要更新 update 5 補丁包。
- 如果沒有更新 vs2013 update 5 補丁包時,在前面編譯完 boost 庫后,其實就會提示相應的錯誤。編譯后,也只有其中的部分庫被成功編譯生成(事實上,只有80個庫被正確生成,其他庫都編譯失敗)。一旦出現編譯失敗,則請先正確更新 update 5 補丁包,然后再刪除掉 bin 以及 bin.v2 目錄,重新按前面的步驟生成 boost 庫然后再使用,避免浪費時間
參考文獻:
- http://www.cnblogs.com/zhcncn/p/3950477.html
- http://www.cnblogs.com/myart/p/4223451.html
- http://www.cnblogs.com/wondering/archive/2009/05/21/boost_setup.html
- common_type.hpp 編譯不過問題解決參考:http://www.cnblogs.com/darkknightzh/p/5394236.html