windows下關(guān)于boost 64位和32位庫的編譯詳細介紹

常用編譯命令:

cd?E:OpenSourceboost_1_63_0boost_1_63_0

編譯32位庫:

x86環(huán)境下編譯得先從開始菜單啟動Visual Studio的Visual 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環(huán)境下編譯得先從開始菜單啟動Visual Studio的Visual 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設(shè)置boost安裝目錄;

stage表示只生成庫文件(dll與lib文件);

toolset指定編譯器,vs2010就是msvc-10.0,vs2005/vs2008分別是msvc-8.0與msvc-9.0;

variant決定編譯什么版本debug、release;

link決定使用靜態(tài)庫還是動態(tài)庫,shared是動態(tài)庫,static是靜態(tài)庫;

address-model決定地址長度,即32還是64位程序;

threading決定使用單線程(single)還是多線程(multi)庫;

runtime-link決定是靜態(tài)(static)還是動態(tài)(shared)鏈接C/C++標準庫;

-s ICU_PATH設(shè)置icu4c的路徑;

install會生成包含頭文件的include目錄。 ? ??

理論上,本文適用于boost的各個版本,尤其是最新版本1.48.0;適用于各種C++編譯器,如VC6.0(部分庫不支持),VS2003,VS2005,VS2008,VS2010,V2012,gcc,arm-linux-gcc,C++ Builder等。

先總結(jié)一下windows系統(tǒng)。

一、下載

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

二、安裝

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

三、編譯

接下來就是最重要的編譯步驟了。需要打開命令提示符(cmd.exe)窗口并執(zhí)行bjam,可以使用–help參數(shù)來查看命令幫助。這里詳細講解一下bjam的命令行參數(shù),因為它非常重要。首先,它涉及到編程環(huán)境的搭建,你需要根據(jù)自己今后具體的使用環(huán)境來選擇合適的命令行參數(shù);其次,它影響到你的硬盤空間,完全編譯的話據(jù)說在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:SDKboostbinvc9"?  link=static?runtime-link=shared?runtime-link=static?threading=multi?debug?release

下面詳細解釋一下每個參數(shù)的含義:

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

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

without/with選擇不編譯/編譯哪些庫。因為python、mpi等庫我都用不著,所以排除之。還有wave、graph、math、regex、test、program_options、serialization、signals這幾個庫編出的靜態(tài)lib都非常大,所以不需要的也可以without掉。這可以根據(jù)各人需要進行選擇,默認是全部編譯。但是需要注意,如果選擇編譯python的話,是需要python語言支持的,應(yīng)該到python官方主頁下載安裝。查看boost包含庫的命令是bjam –show-libraries。

stagedir/prefixstage時使用stagedir,install時使用prefix,表示編譯生成文件的路徑。推薦給不同的IDE指定不同的目錄,如VS2008對應(yīng)的是E:SDKboostbinvc9,VC6對應(yīng)的是E:SDKboostbinvc6,否則都生成到一個目錄下面,難以管理。如果使用了install參數(shù),那么還將生成頭文件目錄,vc9對應(yīng)的就是E:SDKboostbinvc9includeboost-1_46boost,vc6類似(光這路徑都這樣累贅,還是使用stage好)。

build-dir編譯生成的中間文件的路徑。這個本人這里沒用到,默認就在根目錄(E:SDKboost)下,目錄名為bin.v2,等編譯完成后可將這個目錄全部刪除(沒用了),所以不需要去設(shè)置。

link生成動態(tài)鏈接庫/靜態(tài)鏈接庫。生成動態(tài)鏈接庫需使用shared方式,生成靜態(tài)鏈接庫需使用static方式。一般boost庫可能都是以static方式編譯,因為最終發(fā)布程序帶著boost的dll感覺會比較累贅。

runtime-link動態(tài)/靜態(tài)鏈接C/C++運行時庫。同樣有shared和static兩種方式,這樣runtime-link和link一共可以產(chǎn)生4種組合方式,各人可以根據(jù)自己的需要選擇編譯。一般link只選static的話,只需要編譯2種組合即可,即link=static runtime-link=shared和link=static runtime-link=static,本人一般就編這兩種組合。

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

debug/release編譯debug/release版本。一般都是程序的debug版本對應(yīng)庫的debug版本,所以兩個都編譯。

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

?64 位編譯

和32位環(huán)境不同,x64環(huán)境下編譯得先從開始菜單啟動Visual Studio的Visual Studio 2008 x64 Win64 Command Prompt進入命令提示符,而不是隨便打開任意一個命令行窗口就行。然后轉(zhuǎn)到boost根文件夾,運行bootstrap.bat生成x64版的bjam.exe。然后運行命令:?

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

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

  • 只生成一個庫的話加上例如–with-python得編譯選項,避免生成東西太多、時間太長。

  • 要有address-model=64屬性,如果沒有這個屬性的話,會默認生成32位的平臺庫,加入這個選項才能生成64位的DLL。

  • 如果要生成Boost.Python庫,需要先下載安裝x64版的Python安裝包,我用的版本是3.2.3。在使用這個庫編寫Python擴展DLL時,默認是使用動態(tài)庫版的Boost.Python,要使用靜態(tài)版的必須在C++項目中定義BOOST_PYTHON_STATIC_LIB宏,這樣就不用在使用或發(fā)布擴展時帶著boost_python-vc90-mt-1_50.dll一起了,當然擴展DLL的尺寸會大些,如果做實驗沒必要這樣,編譯又慢生成的文件也大。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊8 分享