標籤:
C++有一個強大的Boost,裡面有好多功能是C++標準庫所不支援的。看著Boost中那些強大的功能模板怎能不動心呢!下面我們就來看看如何在VS2010下使用Boost庫。
系統:windows7
開發環境:Visual Studio 10
boost版本:boost_1_55_0
(1)boost下載
首先從boost官方首頁BOOST官方下載網址下載最新版boost安裝包,下載完畢後將其解壓在[D:\ProgramFiles\MicrosoftVisualStudio10.0\boost_1_55_0](此處是我的解壓目錄)。
(2)運行bootstrap.bat產生bjam.exe可執行檔
用VS2010的命令列來實現,後期也是使用VS2010的命令列來實現boost庫的編譯。步驟為:
點擊開始—>所有程式--> Microsoft Visual Studio 2010-->VisualStudio tools--> Visual Studio 2010 命令提示。
開啟VisualStudio 2010 命令提示 後進入boost的解壓目錄(D:\ProgramFiles\MicrosoftVisualStudio10.0\boost_1_55_0):
運行booststrap.bat應用程式: 輸入 bootstrap.bat [斷行符號 ] 即可運行。
運行完畢後就可以在bootstrap.bat當期目錄看到產生的b2.exe及bjam.exe。運行完畢後有相應的提示,可根據提示操作。
(3)修改user-config.jam檔案
user-config.jam檔案的位置在boost解壓目錄boost_1_55_0\tools\build\v2目錄下[我的解壓目錄位置為D:\ProgramFiles\MicrosoftVisualStudio10.0\boost_1_55_0\tools\build\v2目錄下。]
開啟user-config.jam檔案[可用記事本],添加以下內容[其它的內容在預設下都是被屏蔽了的 :
using msvc : 10.0 : : <compileflags>/wd4819 <compileflags>/D_CRT_SECURE_NO_DEPRECATE <compileflags>/D_SCL_SECURE_NO_DEPRECATE <compileflags>/D_SECURE_SCL=0 ; |
<compileflags>間用空格隔開,以上的‘:‘及‘::’的格式都是正確的。如果開發環境為VS2008則msvc項應為msvc:9.0。儲存後關閉檔案。
(4)用bjam.exe編譯產生庫檔案
在Visual Studio 2010 命令提示 命令視窗中執行以下命令[可先命令bjam–show-libraries查看有哪些庫是必須編譯才能使用的 ]:
bjam stage --toolset=msvc-10.0 --without-python --without-mpi --without-wave --without-graph --without-math --without-serialization --stagedir="D:\boost_1_55_0\boost_1_55_0\bin\vc10" link=static runtime-link=shared threading=multi debug release |
stagedir="D:\boost_1_55_0\boost_1_55_0\bin\vc10"指定編譯後的庫檔案存放目錄
如果開發環境是vs2008則對應的--toolset參數值為msvc-9.0。運行此命令後就可以看見在指定目錄F:\boost_1_54_0\boost_1_54_0下產生bin,bin.v2檔案,然後隨著編譯,這兩個檔案裡面的東西也越來越多。
如果是全部編譯,將編譯的庫放在指定的目錄,則可以這樣子書寫bjam命令:
bjam stage --toolset=msvc-10.0 --build-type=complete --stagedir="D:\boost_1_55_0\boost_1_55_0\bin\vc10" link=static runtime-link=shared threading=multi debug release
在XP系統下,用VS2008編譯完全後還有環境配置的提示。
bjam命令和各參數間及參數與參數間都以空格隔開。debug release表示調試版和發布版皆被產生。
bjam使用的形式為:
bjam --參數1-模式1 --參數2-模式2參數3=模式3 … debug release
參數前要加”--”,參數對應項如“—without-serialization” –without與serialization之間要加”-”,其它的參數需要設定成對應的模式用”=”。
bjam.exe部分參數解釋如下:
stage/install:stage指定boost C++庫安裝在名為stage的子目錄下,可又--stagedir指定安裝路徑;install在系統範圍內安裝(windows下安裝目錄為C:\Boost,而在linux中則是/usr/local),目標目錄也可以由--prefix指出。 stage表示只產生庫(dll和lib),install還會產生包含頭文件的include目錄。【未經驗證】 --toolset:指定C++的編譯器[ VS2008對應--toolset=msvc-9.0,vs2010對應--toolset=msvc-10.0 ] --build-type:建立何種方式的庫。預設情況下,該選項設為minimal,即只建立發布版。對於那些想用Visual Studio 或GCC 構建他們項目的調試版的開發人員來說,可能是一個問題。因為這些編譯器會自動嘗試連結調試版的Boost C++ 庫,這樣就會給出一個錯誤資訊。在這種情況下,應將--build-type 選項設為complete,以同時產生Boost C++ 庫的調試版和發布版,當然,所需時間也會更長一些。 link:建立動態[ link=shared ]還是靜態[link=static]的庫. runtime-link:指定C++執行階段程式庫是靜態[ runtime-link=static ]連結還是動態[ runtime-link=shared ]連結 threading:單[ threading=single ]/多線程[ threading=multi ]編譯。 without/with:選擇不編譯/編譯哪些庫。 |
在D:\Program Files\Microsoft Visual Studio 10.0\boost_1_55_0根目錄下Jamroot檔案,是關於bjam的詳細使用說明。
其中沒有安裝的庫比較多,如果我今後要用到這些沒有安裝的這些庫,則重新進入VS2010的命令列安裝即可.
這個過程執行時間比較長[不安裝這麼多的庫還好,要是都安裝的話時間就真的比較長了,感覺我的電腦都不止網上說的一個小時的,所以選擇以後會用到什麼庫再安裝的方式來使用bjam.exe 。不過配置較好的台式機花的時間就比較少了 ],命令視窗會出現大量的字串。這個情境讓我想起了大二開始搞的linux字元介面呀,在那個介面之下操作的的情境與此景相似,而且我覺得在命令列下的命令使用格式都差不多的。可以專門查一下bjam的用法。
(5)VS2010 boost庫配置
為boost設定一個環境變數BOOST,變數值:D:\boost_1_55_0\boost_1_55_0。然後在VS2010的項目中對應目錄進行以下設定。
右鍵項目-->屬性-->VC++目錄;
1.將boost庫檔案目錄(即D:\boost_1_55_0\boost_1_55_0\bin\vc10)加入library目錄(或者放入D:\Program Files\Microsoft Visual Studio 10.0\VC\lib目錄下)。
2.將D:\ProgramFiles\MicrosoftVisualStudio10.0\boost_1_55_0\boost目錄(即解壓的boost1_55_0包含標頭檔的目錄)放入D:\Program Files\Microsoft Visual Studio 10.0\VC\include目錄下)。
如果是VS2008則配置步驟為:
開啟VS2008項目,工具-->選項-->項目和解決方案-->VC++ 目錄,然後在右上方(顯示以下內容的目錄)選擇包含檔案及庫檔案。
(6)測試
#include <boost/thread/thread.hpp>#include <iostream>void hello(){for(int i=0;i<30;i++){std::cout<<"Hello world, I'm a thread!"<<std::endl;}}void hello2(){for(int i=0;i<30;i++){std::cout<<"Hello world2222, I'm a thread!"<<std::endl;}}int main(){boost::thread thrd(&hello);boost::thread thrd2(&hello2);thrd.join();thrd2.join();return 0;}
boost庫在windows的編譯及配置(VS2010)