這系列文章將逐一介紹Boost庫(kù)的具體內(nèi)容。首先我們從Boost在Windows下編譯開(kāi)始講解。
對(duì)于大部分Boost應(yīng)用來(lái)說(shuō),它是不用編譯的,直接包含頭文件就可使用,如:
anyarrayasioconversioncrcbind/mem_fnenable_iffunctionlambdamplsmart_pt
只有少部分需要編譯成庫(kù)文件,需要編譯的庫(kù)如下:
date_timefilesystemfunction_typesgraphiostreamsmathmpiprogram_optionspythonregexserializationsignalssystemtestthreadwave
要完全編譯boost庫(kù)需要先準(zhǔn)備一些第三方庫(kù):
1. Regex所需Unicode支持類庫(kù) --
ICU 編譯ICU較為簡(jiǎn)單,解開(kāi)ICU包之后,在其目錄下可以找到一個(gè)叫"allinone"的目錄,用Visual studio或者visual studio express打開(kāi)里面的allinone.sln,選擇release,即可以編譯完成,編譯之后,將include目錄和release目錄下的庫(kù)文件拷貝出來(lái),分別放在C:\icu\include和C:\icu\lib.
2. Graph所需的Xml處理類庫(kù) --
Expat, 將該自解壓文件解壓到C:\expat即可。
3.Boost.MPI所需MPI類庫(kù) -- Boost的官方站點(diǎn)說(shuō)需要MPICH或OpenMPI之類的支持,事實(shí)上在Windows下總是會(huì)提示需要MPIC++,事實(shí)上你需要的是
Microsoft Cluster Pack SDK,下載并默認(rèn)安裝在c:\Program Files\Microsoft Compute Cluster Pack下。
這里我遇到兩個(gè)問(wèn)題,一并說(shuō)一下:
如果下載的是Microsoft HPC Pack 2008 SDK,或者M(jìn)icrosoft Compute ClusterPack不是裝到默認(rèn)的路徑下,那bjam就會(huì)抓瞎,找不到mpic++的路徑,這時(shí)候可以修改一下mpi.jam(在tools\build\v2\tools):
local cluster_pack_path_native = "你的路徑" ;
現(xiàn)在完全編譯Boost所需要的類庫(kù)都準(zhǔn)備好了。
下載Boost并解壓到C:\boost.src,進(jìn)入Visual studio prompt,然后運(yùn)行boost.src目錄下的bootstrap.bat,這個(gè)腳本會(huì)幫你生成編譯所需的bjam.exe文件。
如果你機(jī)器上同時(shí)有多個(gè)不同版本的VC++存在,先修改project-config.jam,將
"using msvc ;"改為諸如" using msvc : 9.0 ;"
要支持mpi,你可以建立一個(gè)user-config.jam文件,然后添加一行“using mpi ;”即可
接下來(lái)的工作,我寫(xiě)了個(gè)小腳本boost.bat
@echo Making all Boost library -- By Ray Linnset EXPAT_INCLUDE=C:\USR\INCLUDEset EXPAT_LIBPATH=C:\USRset INCLUDE=%INCLUDE%;C:\Program Files\Microsoft Compute Cluster Pack\include;C:\Program Files\Microsoft Compute Cluster Pack\Include\amd64;set LIBPATH=%LIBPATH%;C:\Program Files\Microsoft Compute Cluster Pack\Lib\amd64;echo adding -a to force rebuild:debugbjam -s HAVE_ICU=1 -s ICU_PATH=C:\usr threading=multi link=static runtime-link=shared variant=debug -s BZIP2_SOURCE="C:\win32_utils\bzip2-1.0.5" -s ZLIB_SOURCE="C:\win32_utils\zlib-1.2.5" --user-config="./user-config.jam" --prefix="C:\boost" install:releasebjam -s HAVE_ICU=1 -s ICU_PATH=C:\usr threading=multi link=static runtime-link=shared variant=release -s BZIP2_SOURCE="C:\win32_utils\bzip2-1.0.5" -s ZLIB_SOURCE="C:\win32_utils\zlib-1.2.5" --user-config="./user-config.jam" --prefix="C:\boost" install
編譯后會(huì)得到debug和release兩個(gè)版本的boost,至此Boost編譯完成。現(xiàn)在我們開(kāi)始配置visual studio以方便以后使用Boost類庫(kù)。
先設(shè)置一個(gè)環(huán)境變量
set Boost=C:\boost
接著打開(kāi)Visual studio的菜單 tools-->Options...->projects and solutions-->VC++ directories 如圖添加Boost類庫(kù)的頭文件和庫(kù)文件的路徑。
下面這一小段代碼用于測(cè)試設(shè)置是否正確:
#include "stdafx.h"#include <iostream>#include <iterator>#include <algorithm>#include <string>#include <boost/regex.hpp>int _tmain(int argc, _TCHAR* argv[]){std::string line;static const boost::regex pat("^Subject:(Re:|Aw:)*(.*)");while (std::cin){std::getline(std::cin, line);boost::smatch matches;if(boost::regex_match(line, matches, pat))std::cout << matches[2] << std::endl;}}
如無(wú)差錯(cuò),這段代碼應(yīng)該可以正確編譯并鏈接。這時(shí)候可以刪除boost.src。