1. 程式人生 > >windows 下boost 64 位和32位庫的編譯編譯

windows 下boost 64 位和32位庫的編譯編譯

常用編譯命令: cd E:\OpenSource\boost_1_63_0\boost_1_63_0 編譯32位庫: x86環境下編譯得先從開始選單啟動Visual StudioVisual Studio 2008 Command Prompt進入命令提示符
執行bootstrap.bat生成x86版的bjam.exe
bjam toolset=msvc-9.0 threading=multi link=static runtime-link=static --with-regex  編譯64位庫: x64環境下編譯得先從開始選單啟動Visual StudioVisual Studio 2008 x64 Win64 Command Prompt
進入命令提示符
執行bootstrap.bat生成x64版的bjam.exe
bjam toolset=msvc-9.0 threading=multi link=static runtime-link=static --with-regex address-model=64  其中,--prefix設定boost安裝目錄; stage表示只生成庫檔案(dll與lib檔案); toolset指定編譯器,vs2010就是msvc-10.0,vs2005/vs2008分別是msvc-8.0與msvc-9.0; variant決定編譯什麼版本debug、release; link決定使用靜態庫還是動態庫,shared是動態庫,static是靜態庫;
address-model決定地址長度,即32還是64位程式; threading決定使用單執行緒(single)還是多執行緒(multi)庫; runtime-link決定是靜態(static)還是動態(shared)連結C/C++標準庫; -s ICU_PATH設定icu4c的路徑; install會生成包含標頭檔案的include目錄。

理論上,本文適用於boost的各個版本,尤其是最新版本1.48.0;適用於各種C++編譯器,如VC6.0(部分庫不支援),VS2003VS2005VS2008VS2010V2012gccarm-linux-gccC++ Builder等。

先總結一下

Windows系統。

一、下載

首先從boost官方主頁http://www.boost.org/下載最新版boost安裝包,或者使用Subversion獲取最新版本,地址是:http://svn.boost.org/svn/boost/trunk。本人現在一般都用svn,這樣可以很方便的進行update和build,而不是每次都下載新的安裝包並rebuild。

二、安裝

如果是使用下載的安裝包,那麼請將boost安裝包解壓至本地目錄,如:E:\SDK\boost;如果是用svn的,也可以將boost的程式碼checkout到這個目錄。因為boost一部分類是需要編譯成庫才能使用的,所以我們還需要準備好boost專用的編譯輔助工具bjam。在命令提示符(cmd.exe)中執行根目錄下的bootstrap.bat,編譯後的bjam.exe會自動拷貝到該目錄下(bjam必須與boost-build.jam在同級目錄)。

三、編譯

接下來就是最重要的編譯步驟了。需要開啟命令提示符(cmd.exe)視窗並執行bjam,可以使用--help引數來檢視命令幫助。這裡詳細講解一下bjam的命令列引數,因為它非常重要。首先,它涉及到程式設計環境的搭建,你需要根據自己今後具體的使用環境來選擇合適的命令列引數;其次,它影響到你的硬碟空間,完全編譯的話據說在3G以上

使用的bjam命令如下:

bjam stage --toolset=msvc-9.0 --without-graph --without-graph_parallel --without-math --without-mpi --without-python --without-serialization --without-wave --stagedir="E:\SDK\boost\bin\vc9" link=static runtime-link=shared runtime-link=static threading=multi debug release

下面詳細解釋一下每個引數的含義:

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

toolset指定編譯器,可選的如borlandgccmsvcVC6)、msvc-9.0VS2008)等。

without/with選擇不編譯/編譯哪些庫。因為pythonmpi等庫我都用不著,所以排除之。還有wavegraphmathregextestprogram_optionsserializationsignals這幾個庫編出的靜態lib都非常大,所以不需要的也可以without掉。這可以根據各人需要進行選擇,預設是全部編譯。但是需要注意,如果選擇編譯python的話,是需要python語言支援的,應該到python官方主頁http://www.python.org/下載安裝。檢視boost包含庫的命令是bjam --show-libraries

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

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

link生成動態連結庫/靜態連結庫。生成動態連結庫需使用shared方式,生成靜態連結庫需使用static方式。一般boost庫可能都是以static方式編譯,因為最終釋出程式帶著boostdll感覺會比較累贅。

runtime-link動態/靜態連結C/C++執行時庫。同樣有sharedstatic兩種方式,這樣runtime-linklink一共可以產生4種組合方式,各人可以根據自己的需要選擇編譯。一般link只選static的話,只需要編譯2種組合即可,即link=static runtime-link=sharedlink=static runtime-link=static,本人一般就編這兩種組合。

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

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

本人按以上方式分別編譯了靜態連結和動態連結兩個版本後,整個E:\SDK\boost目錄有1.28G。如果不打算將來再升級boost版本,那麼可以將編譯生成的中間檔案bin.v2目錄刪除,這樣整個目錄(包括安裝包解壓縮檔案和編譯生成的庫檔案)會減小至不到800MB,如果runtime-link只選了一種方式,那麼整個目錄只有600MB。事實上編譯完成後除了boostbin目錄之外其他目錄和檔案已經可以刪除了,這樣還可以騰出350MB的空間來。不過我又研究了一下,其實libs這個目錄也很有用,它提供了所有Boost類的使用範例,平時可以作為參考;另外doc目錄是一個完整的boost使用幫助文件,當然最好也不要刪了。其他幾個目錄和檔案加起來也就幾十兆,索性都給它們留一條生路吧。

 64 位編譯

32位環境不同,x64環境下編譯得先從開始選單啟動Visual StudioVisual Studio 2008 x64 Win64 Command Prompt進入命令提示符,而不是隨便開啟任意一個命令列視窗就行。然後轉到boost根資料夾,執行bootstrap.bat生成x64版的bjam.exe。然後執行命令:

bjam --build-type=complete toolset=msvc-9.0 threading=multi link=shared address-model=64

即可生成DLL版平臺庫,如果要編譯靜態庫版就把shared改為static。

  • 只生成一個庫的話加上例如--with-python得編譯選項,避免生成東西太多、時間太長。
  • 要有address-model=64屬性,如果沒有這個屬性的話,會預設生成32位的平臺庫,加入這個選項才能生成64位的DLL。
  • 如果要生成Boost.Python庫,需要先下載安裝x64版的Python安裝包,我用的版本是3.2.3。在使用這個庫編寫Python擴充套件DLL時,預設是使用動態庫版的Boost.Python,要使用靜態版的必須在C++專案中定義BOOST_PYTHON_STATIC_LIB巨集,這樣就不用在使用或釋出擴充套件時帶著boost_python-vc90-mt-1_50.dll一起了,當然擴充套件DLL的尺寸會大些,如果做實驗沒必要這樣,編譯又慢生成的檔案也大。
  • vs工具鏈版本:vs2003 : msvc-7.1,vs2005 : msvc-8.0,vs2008 : msvc-9.0,vs2010 : msvc-10.0
From:http://blog.sina.com.cn/s/blog_62431a790101b4ci.html