Win7+vs2010下安裝boost_1_46_1庫


一、boost庫分類:

(1)不需要編譯庫:any、array、asio、conversion、crc、bind/mem_fn、enable_if、function、lambda、mpl、smart_ptr...

(2)需要編譯的庫:date_time、filesystem、function_types、graph、iostreams、math、mpi、program_options、python、regex、serialization、signals、system、test、thread、wave

二、完全編譯boost將要依賴的一些官方庫:

(1)Regex所需Unicode支持類庫 -- ICU ,編譯ICU較為簡單,解開ICU包之后,在其目錄下可以找到一個叫"allinone"的目錄,用Visual studio或者visual studio express打開里面的allinone.sln,選擇release,即可以編譯完成,編譯之后,將include目錄和lib目錄下的庫文件拷貝出來,分別放在C:\icu\include和C:\icu\lib。

(2)Graph所需的XML處理類庫 --Expat,下載expat-win32bin-2.0.1安裝到C:\expat即可。

(3)MPI所需MPI類庫 -- Boost的官方站點說需要MPICH或OpenMPI之類的支持,事實上在Windows下總是會提示需要MPIC++,你需要的是Microsoft Cluster Pack SDK,下載並默認安裝在C:\ProgramFiles\Microsoft Compute Cluster Pack下。(說明:如果安裝Microsoft HPC Pack 2008 SDK或Microsoft Compute ClusterPack時不是裝到默認的路徑下,那bjam就會抓瞎,找不到mpic++的路徑,這時候可以修改一下mpi.jam(在boost_1_46_1\tools\build\v2\tools): local cluster_pack_path_native = "你的路徑")

(4)Python所需Python語言庫--Python,下載Python 2.7.1 Windows Installer,安裝到C:\

三、編譯boost庫:

1.下載安裝包boost_1_46_1 選擇下載windows版本

2.解壓縮到D:\boost目錄下

3.運行bootstrap.bat

(1)從vs2010的工具菜單進入命令提示窗口(單擊“開始”按鈕,指向“所有程序”,指向“Microsoft Visual Studio 2010”,指向“Visual Studio tools(工具)”,然后單擊“Visual Studio 2010 command prompt(命令提示)”
(2)cd到D:\boost\boost_1_46_1下執行bootstrap.bat,然后,會在d:\boost\boost_1_46_1\下生成bjam.exe

4.設定編譯環境(加入紅色字體)    
修改user-config.jam (d:\boost\boost_1_46_1\tools\build\v2\user-config.jam) 的MSVC configuration  

# MSVC configuration      
# Configure msvc (default version, searched in standard location # and PATH).   
# using msvc ;   
using msvc : 10.0 : : <compileflags>/wd4819 <compileflags>/D_CRT_SECURE_NO_DEPRECATE
<compileflags>/D_SCL_SECURE_NO_DEPRECATE <compileflags>/D_SECURE_SCL=0 ;

要支持mpi,你可以添加一行“using mpi ;”即可

5.cd到D:\boost\boost_1_46_1下執行 
編譯boost庫命令:

bjam install -s HAVE_ICU=1 -s ICU_PATH=C:\icu --toolset=msvc-10.0 --build-type=complete link=static runtime-link=static --prefix="E:\boost\boost_1_46_1" threading=multi

variant=release

(這一步需要等待很長時間,大概一個小時左右……)

下面詳細解釋一下每個參數的含義:
stage/install:stage 表示只生成庫(dll和lib),install還會生成包含頭文件的include目錄。推薦使用stage,因為install生成的這個include目錄實際就是boost安裝包解壓縮后的boost目錄,所以可以直接使用,而且不同的IDE都可以使用同一套頭文件,這樣既節省編譯時間,也節省硬盤空間。

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

without/with:選擇不編譯/編譯哪些庫,不需要的可以without掉。這可以根據各人需要選擇,默認是全部編譯。但是需要注意,如果選擇編譯python的話,是需要python語言支持的,要先下載python。

stagedir/prefix:stage 時使用stagedir,install時使用prefix,表示編譯生成文件的路徑。(說明:使用install時,include文件目錄結構是這樣的E:\boost\boost_1_46_1\include\boost_1_46_1\boost,路徑很累贅,可以去掉中間一層\boost_1_46_1。不管怎樣,個人覺得還是使用stage好,一方面是快,另一方面也沒這么糾結的目錄)

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

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

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

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

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

 

如果不選擇安裝Python,兩步:

(1)bjam --without-python --toolset=msvc-10.0 --build-type=complete

        --prefix="E:\boost\boost_1_46_1" install

(2)bjam --with-python --toolset=msvc-10.0 --build-type=complete

        --prefix="E:\boost\boost_1_46_1" install

6.設定vs2010環境

(注:在2010環境下這步,在項目-->右鍵屬性-->VC++ Directories 中去填寫對應路徑 )   
Tools -> Options -> Projects and Solutions -> VC++ Directories   
在Library files加上E:\boost\boost_1_46_1\lib   
在Include files加上E:\boost\boost_1_46_1\include

 

 

相關:

使用舉例:

  #include<boost\thread.hpp>

  此時,不用包含庫文件,boost的auto-link機制將會自動幫我們包含對應的靜態lib。也就是說,boost默認是以靜態方式鏈接的,這樣我們的工程屬性最好也設為Multi-threaded (Debug)。如果想使用dll動態方式鏈接,需要預先定義宏:

  #define BOOST_ALL_DYN_LINK

  同樣,此時boost也會默認幫我們包含對應的lib。如果不想使用boost提供的auto-link機制,或者對它的自動鏈接不太放心的話(其實大可不必擔心),可以預先定義宏:

  #define BOOST_ALL_NO_LIB

  然后使用以下方法鏈接:

  #pragma comment(lib, "boost_thread-vc100-mt-1_46.lib")或

  #pragma comment(lib, "boost_thread-vc100-mt.lib")

  這兩個lib其實是一樣的,實在不明白boost編譯時為什么每個庫都要復制一份,難道是因為后者在升級boost版本后不用改代碼?另外還有一個比較有用的宏:

  #define BOOST_LIB_DIAGNOSTIC

  它可以讓VC在編譯時的output窗口中輸出程序具體鏈接了哪些boost庫以及鏈接順序。

  關於boost的auto-link機制,詳細可以看看boost\config\auto_link.hpp里的代碼,很容易可以讀懂,並且值得我們學習。

  

另:Linux下編譯與配置的區別:

  我的Linux與Windows使用了共享目錄,將Windows下的E:\SDK目錄映射成了Linux下的/mnt/hgfs/sdk目錄。

  所以我的boost源文件根目錄就是/mnt/hgfs/sdk/boost_1_45_0,cd進去。

  首先需要編譯bjam:

  cd tools/jam

  ./build_dist.sh

我在虛擬機的Linux下編譯bjam的時候最后會卡住,屏幕顯示到mkdir的地方就不往下走了,不過其實這時候bajm已經編譯完成。

  接下來將stage/bin.linuxx86目錄下生成的bjam拷貝到boost源文件根目錄boost_1_45_0下,cd進去,開始編譯boost:

  ./bjam stage --toolset=gcc --with-date_time --with-thread --with-filesystem --with-program_options --stagedir="/mnt/hgfs/sdk/boost_1_45_0/bin/gcc" link=static runtime-link=static threading=multi debug release

  這些參數的意義與Windows下完全一樣,只不過編譯器改成gcc,其他選項根據自己的需要進行設置。

  生成的庫文件就在bin/gcc/lib目錄下,與vc10編譯的一樣,lib目錄感覺是多余的,手動將庫文件拷貝到gcc目錄下,刪掉lib目錄,這屬於個人喜好問題。

  然后把中間文件全部刪掉,包括bin.v2目錄和tools/jam/stage目錄。

  關於boost庫的使用,為了不用每次寫makefile都把boost的頭文件和庫文件的路徑帶着,而且為了讓跨平台程序公用一套代碼,

  可以將boost的頭文件和庫文件路徑加到Linux的環境變量中。打開/etc/profile,加入以下gcc環境變量:

  CPLUS_INCL?_PATH=$CPLUS_INCL?_PATH:"/mnt/hgfs/sdk/boost_1_45_0"

  export CPLUS_INCL?_PATH

  LIBRARY_PATH=$LIBRARY_PATH:"/mnt/hgfs/sdk/boost_1_45_0/bin/gcc"

  export LIBRARY_PATH

  這樣就可以直接使用boost的頭文件和庫文件了,並且與Windows共用一套代碼,非常方便。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM