1. 程式人生 > >Windows下如何編譯使用boost?

Windows下如何編譯使用boost?

最近在看boost::asio的東西,所以必須要用到boost庫,下載了一個,所以與大家分享下boost庫的編譯方法。

本方法應該適用於boost的任何版本,應該適用於任何C++編譯器(VC6.0可能對某些庫不支援,因為模板的原因),因為Linux沒怎麼用,所以只是分享下windows上的編譯方法。

1.下載boost

從boost官網( http://www.boost.org )上下載最新的boost版本,現在最新是1.49版本,解壓到自定義目錄(為了後面好說明,這裡假設為boost_1_49)

2.編譯安裝boost

boost_1_49目錄下會有一個bootstrap.bat批處理,可以直接點選它,會在 boost_1_49\tools\build\v2 資料夾下生成兩個exe,b2.exe;bjam.exe,拷貝這兩個檔案到boost_1_49目錄下。從cmd命令進入到boost_1_49路徑下,如果你不知道如何編譯,可以輸入–help檢視命令列幫助。

輸入如下命令:

b2 toolset=msvc-10.0 --layout=versioned architecture=x86 address-model=64
link=static variant=debug,release threading=multi runtime-link=static 
--without-python --without-mpi --without-wave --without-graph 
--without-math --without-serialization stage

使用不同的命令對你使用boost也會產生很大的影響,因為CPU速度和硬碟現在都已經不是大問題了,所以本例中選擇了除了不必要庫的完全編譯,當然了,你時間夠,硬碟夠,可以完全編譯

b2 --toolset=msvc-10 --build-type=complete

解釋完以上的命令後,再說完全編譯的後果。

1.toolset:表示編譯器工具,我安裝的是VS2010,所以是msvc-10(如果你是VS2005,可以使用msvc-8.0 VS2008是msvc-9.0)

2.architecture:表示架構,也就是你的CPU架構,x86,x64,因為我安裝的是win7 32位,所以使用了x86的架構

3.instruction-set:表示指令集,依然是8086指令集

4.address-model:表示地址長度為32位

5.link:表示生成動態/靜態連結庫,動態連結庫是shared,靜態連結庫是static,一般都會編譯成靜態庫,因為給出程式的時候打包boost的庫會非常龐大

6.variant:表示生成的Debug或者release版本,一般情況下會兩種版本都會編譯出來的

7.threading:表示單/多執行緒編譯,一般我們的程式都會用到多執行緒,所以選擇了multi

8.runtime-link:表示動態/靜態連結C/C++執行時庫(C/C++ Runtime),我們選擇了動態連結

9.without/with:表示不需要編譯/需要編譯哪些庫,一些自己不用的庫可以無需編譯

10.stage/install:stage表示只生成庫檔案(DLL和Lib),install還會生成包含標頭檔案的include目錄,推薦使用stage,因為boost_1_49\boost中就是boost庫完整的標頭檔案,所以無需再拷貝一份出來。編譯出來的庫會放在stage資料夾中

這樣一份完整的boost庫就生成了,剩下就是直接使用到專案中了。

上面的編譯指令可以存成一個批處理,這樣進入到boost_1_49目錄後,只需要執行批處理就可以了,更方便。

(現在看到為什麼不推薦使用完全編譯了吧,因為完全編譯會編譯出各種組合的所有情況,需要佔用更多的空間和時間,所以建議各位朋友還是放棄了吧)

使用的時候可以直接包含到專案中,然後在對應的檔案中包含相應的標頭檔案即可,例如

#include "boost/asio.hpp"

這個工具可以幫你下載並編譯好,你只需要點選滑鼠配置下就可以了,一步步操作如下圖:

boost_1_47_setup_1
boost_1_47_setup_2
boost_1_47_setup_3
boost_1_47_setup_4
最後點選Install之後就會編譯並安裝到你指定的目錄,這個夠方便吧(不過這個是下載後編譯,可能會有點慢)。最後一步就不演示了,因為我還不想用這種方法。

以上就是boost在windows環境下的安裝編譯方法,boost庫可以說是現在最強大的C++類庫了,你想要的任何功能都有,我認為每一個C/C++程式設計師都應該學習的。