天天看點

VS2008下編譯BOOST 1.39的ASIO庫

由于全部編譯BOOST庫需要的時間太長,而且耗費空間,況且我隻需要用ASIO庫,是以就沒有必要全部編譯了。

boost庫到www.boost.org上下載下傳。

編譯很簡單,假設你的boost存放的目錄是D:/BOOST_139。

1.運作VS2008的指令提示行,進入D:/BOOST_139/tools/jam;執行build_dist.bat,這樣就産生了bjam.exe,該檔案位于/tools/jam/stage/bin.ntx86

2.為了友善,将bjam.exe拷貝到D:/BOOST_139/;

3.開始根據自己的需要編譯,我隻需求ASIO庫,是以分别執行:

bjam --build-type=complete --with-regex --toolset=msvc-9.0 stage 

bjam --build-type=complete --with-system --toolset=msvc-9.0 stage 

bjam --build-type=complete --with-thread  --toolset=msvc-9.0 stage 

bjam --build-type=complete --with-date_time --toolset=msvc-9.0 stage

4.設定路徑。啟動vs2008,打開“工具”-》“選項”,選擇“項目和解決方案”->“vc++ 目錄”,将D:/BOOST_139/stage/lib和D:/BOOST_139分别添加到庫檔案和包含檔案中

============================================================

其他說明:

以後還需要其他庫怎麼辦?

按照上面的套用就行了。比如你的代碼裡有#include <boost/serialization/vector.hpp>,很明顯你需要serialization庫,bjam --build-type=complete --with- serialization --toolset=msvc-9.0 stage。

網上找的一些有用的資料:

編譯參數:

stage/install :stage表示隻生成庫(dll和lib),install還會生成包含頭檔案的include目錄。本人推薦使用 stage,因為install生成的這個include目錄實際就是boost安裝包解壓縮後的boost目錄(E:/SDK /boost_1_39_0/boost,隻比include目錄多幾個非hpp檔案,都很小),是以可以直接使用,而且不同的IDE都可以使用同一套頭檔案,這樣既節省編譯時間,也節省硬碟空間。

toolset :指定編譯器,可選的如borland、gcc、msvc(VC6)、msvc-9.0(VS2008)等。

without/with :選擇不編譯/編譯哪些庫。本人不需要編譯python庫,是以排除之,可以根據各人需要選擇,預設是全部編譯。但是需要注意,如果選擇編譯python的話,是需要python語言支援的,應該到python官方首頁http://www.python.org下載下傳安裝。

stagedir/prefix :stage時使用stagedir,install時使用prefix,表示編譯生成檔案的路徑。推薦給不同的IDE指定不同的目錄,如VS2008對應的是E:/SDK/boost_1_39_0/vc9/lib,VC6對應的是E:/SDK/boost_1_39_0 /vc6/lib,否則都生成到一個目錄下面,難以管理。如果使用了install參數,那麼還将生成頭檔案目錄,vc9對應的就是E:/SDK /boost_1_39_0/vc9/include/boost-1_39/boost,vc6類似(光這路徑都這樣累贅,還是使用stage好)。

build-dir :編譯生成的中間檔案的路徑。這個本人這裡沒用到,預設就在根目錄(E:/SDK/boost_1_39_0)下,目錄名為bin.v2,等編譯完成後可将這個目錄全部删除(沒用了),是以不需要去設定。

link :生成動态連結庫/靜态連結庫。生成動态連結庫需使用shared方式,生成靜态連結庫需使用static方式。這裡需要注意的是,static 方式下,最終生成的很多靜态連結庫大小都在幾兆、幾十兆,甚至接近百兆。這麼大的庫我們一般是不會采用靜态連結方式的,是以這些庫不推薦以static方式編譯(without掉);如果已經編譯了趕快删,肯定沒用,否則将占用近1G的硬碟空間。以下是巨型庫黑名單:wave、graph、math、 regex、test、program_options、serialization、signals。

runtime-link :動态/靜态連結C/C++運作時庫。同樣有shared和static兩種方式,這樣runtime-link和link一共可以産生4種組合方式。雖然它和link屬性沒有直接關系,但我們習慣上,一個工程如果用動态連結那麼所有庫都用動态連結,如果用靜态連結那麼所有庫都用靜态連結。是以這樣其實隻需要編譯2種組合即可,即link=shared runtime-link=shared和link=static runtime-link=static。

threading :單/多線程編譯。一般都寫多線程程式,當然要指定multi方式了;如果需要編寫單線程程式,那麼還需要編譯單線程庫,可以使用single方式。

debug/release :編譯debug/release版本。一般都是程式的debug版本對應庫的debug版本,是以兩個都編譯。

繼續閱讀