boost是一個(gè)準(zhǔn)標(biāo)準(zhǔn)庫(kù),相當(dāng)于STL的延續(xù)和擴(kuò)充,它的設(shè)計(jì)理念和STL比較接近,都是利用泛型讓復(fù)用達(dá)到最大化。不過對(duì)比STL,boost更加實(shí)用。  STL集中在算法部分,而boost包含了不少工具類,可以完成比較具體的工作。   boost主要包含一下幾個(gè)大類:字符串及文本處理、容器、迭代子(Iterator)、算法、函數(shù)對(duì)象和高階編程、泛型編程、模板元編程、預(yù)處理元編程、并發(fā)編程、數(shù)學(xué)相關(guān)、糾錯(cuò)和測(cè)試、數(shù)據(jù)結(jié)構(gòu)、輸入/輸出、跨語言支持、內(nèi)存相關(guān)、語法分析、雜項(xiàng)。 有一些庫(kù)是跨類別包含的,就是既屬于這個(gè)類別又屬于那個(gè)類別。      在文本處理部分,conversion/lexcial_cast類用于“用C++”的方法實(shí)現(xiàn)數(shù)字類型和字符串之間的轉(zhuǎn)換。 主要是替代C標(biāo)準(zhǔn)庫(kù)中的 atoi、 itoa之類的函數(shù)。當(dāng)然其中一個(gè)最大的好處就是支持泛型了。       format庫(kù)提供了對(duì)流的“printf-like”功能。printf里使用%d、%s等等的參數(shù)做替換的方法在很多情況下還是非常方便的,STL的iostream則缺乏這樣的功能。format為stream增加了這個(gè)功能,并且功能比原始的printf更強(qiáng)。       regex,這個(gè)不多說了,正則表達(dá)式庫(kù)。如果需要做字符串分析的人就會(huì)理解正則表達(dá)式有多么有用了。       spirit,這個(gè)是做LL分析的框架,可以根據(jù)EBNF規(guī)則對(duì)文件進(jìn)行分析。(不要告訴我不知道什么是EBNF)。做編譯器的可能會(huì)用到。一般人不太用的到。       tokenizer庫(kù)。我以前經(jīng)常在CSDN上看到有人問怎么把一個(gè)字符串按逗號(hào)分割成字符串?dāng)?shù)組。也許有些人很羨慕VB的split函數(shù)。現(xiàn)在,boost的tokenizer也有相同的功能了,如果我沒記錯(cuò)的話,這個(gè)tokenizer還支持正則表達(dá)式,是不是很爽?        array: 提供了常量大小的數(shù)組的一個(gè)包裝,喜歡用數(shù)組但是苦惱數(shù)組定位、確定數(shù)組大小等功能的人這下開心了。       dynamic_bitset,動(dòng)態(tài)分配大小的bitset,我們知道STL里有個(gè)bitset,為位運(yùn)算提供了不少方便。可惜它的大小需要在編譯期指定。現(xiàn)在好了,運(yùn)行期動(dòng)態(tài)分配大小的bitset來了。       graph。提供了圖的容器和相關(guān)算法。我還沒有在程序中用到過圖,需要用的人可以看看。       multi_array提供了對(duì)多維數(shù)組的封裝,應(yīng)該還是比較有用的。       并發(fā)編程里只有一個(gè)庫(kù),thread,提供了一個(gè)可移植的線程庫(kù),不過在Windows平臺(tái)上我感覺用處不大。因?yàn)樗腔赑osix線程的,在Windows里對(duì)Posix的支持不是很好。       接下來的 數(shù)學(xué)和數(shù)值 類里,包含了很多數(shù)值處理方面的類庫(kù),數(shù)學(xué)類我也不太熟,不過這里有幾個(gè)類還是很有用的,比如rational分?jǐn)?shù)類,random隨機(jī)數(shù)類,等等。      static_assert,提供了編譯器的assert功能。      test庫(kù),一個(gè)單元測(cè)試框架,非常不錯(cuò)。       concept_check提供了泛型編程時(shí),對(duì)泛型量的一點(diǎn)檢查,不是很完善,不過比沒有好。      數(shù)據(jù)類型類any,一個(gè)安全的可以包含不同對(duì)象的類。把它作為容器的元素類型,那么這個(gè)容器就可以包含不同類型的元素。比用void *要安全。     compressed_pair,跟STL里的pair差不多。不過對(duì)空元素做了優(yōu)化。      tuple,呵呵,也許是某些人夢(mèng)寐以求的東西。可以讓函數(shù)返回多個(gè)值。     跨語言支持:python,呵呵,好東東啊,可以將C++的類和函數(shù)映射給python使用。以下為幾個(gè)CSDN上的關(guān)于boost.python的中文資料:http://dev.csdn.net/article/19/19828.shtmhttp://dev.csdn.net/article/19/19829.shtmhttp://dev.csdn.net/article/19/19830.shtmhttp://dev.csdn.net/article/19/19831.shtm    pool:內(nèi)存池,呵呵,不用害怕頻繁分配釋放內(nèi)存導(dǎo)致內(nèi)存碎片,也不用自己辛辛苦苦自己實(shí)現(xiàn)了。    smart_ptr:智能指針,這下不用擔(dān)心內(nèi)存泄漏的問題了吧。不過,C++里的智能指針都還不是十全十美的,用的時(shí)候小心點(diǎn)了,不要做太技巧性的操作了。    date_time,這個(gè)是平臺(tái)、類庫(kù)無關(guān)的實(shí)現(xiàn),如果程序需要跨平臺(tái),可以考慮用這個(gè)。     timer,提供了一個(gè)計(jì)時(shí)器,雖然不是Windows里那種基于消息的計(jì)時(shí)器,不過據(jù)說可以用來測(cè)量語句執(zhí)行時(shí)間。    uitlity里提供了一個(gè)noncopyable類,可以實(shí)現(xiàn)“無法復(fù)制”的類。很多情況下,我們需要避免一個(gè)類被復(fù)制,比如代表文件句柄的類,文件句柄如果被兩個(gè)實(shí)例共享,操作上會(huì)有很多問題,而且語義上也說不過去。一般的避免實(shí)例復(fù)制的方法是把拷貝構(gòu)造和operator=私有化,現(xiàn)在只要繼承一下這個(gè)類就可以了,清晰了很多。     value_initialized:數(shù)值初始化,可以保證聲明的對(duì)象都被明確的初始化,不過這個(gè)真的實(shí)用嗎?似乎寫這個(gè)比直接寫初始化還累。呵呵,仁者見仁了。    這里面除了regex、python和test需要編譯出庫(kù)才能用,其他的大部分都可以直接源代碼應(yīng)用,比較方便。其實(shí)這些庫(kù)使用都不難。最主要的原因是有些庫(kù)的使用需要有相關(guān)的背景知識(shí),比如元編程、STL、泛型編程等等。◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎概要這個(gè)概要將幫助你開始利用Boost庫(kù)。通過如下的步驟來取得、生成、安裝Boost。下面是生成安裝Boost的概要

下載
1 Boost庫(kù)通過SourceForge文件發(fā)布系統(tǒng)來進(jìn)行發(fā)布。可以 從SourceForge下載得到Boost發(fā)行版. 并把它解壓縮到一個(gè)合適的地方。

你從網(wǎng)站上可以得到Boost發(fā)行版的所有的庫(kù)和其他文檔。他們被打包為ZIP, TAR.GZ, and TAR.BZ2 文件格式。 (在這里)既可以得到老的版本。

也可以從CVS 庫(kù)同步到當(dāng)前Boost最新的快照版本。
.zip file
.zip 格式被自由和商業(yè)的壓縮/存檔工具廣泛的支持。如果你還沒有一個(gè).zip文件解壓器。那么可以從 Info-ZIP 網(wǎng)站下載一個(gè),這個(gè)網(wǎng)站提供了不少操作系統(tǒng)上面的版本。
文 本文件的行結(jié)束符如果打包為.zip 作為被每一個(gè)庫(kù)開發(fā)者支持的(東西)(Text file line endings in the .zip file are as supplied by each library developer),在windows下面工作很好,在linux/unix下面就沒那么漂亮了。.tar.gz和.tar.bz2支持對(duì)于 linux/unix更友好的文件換行符

.tar.gz 和 .tar.bz2 文件
.tar.gz 格式在Unix/Linux下面被廣泛的支持。一些Windows的壓縮/歸檔工具也可以順利讀取。因?yàn)間zip文檔把所有文件看成一個(gè)文檔壓縮,所以要比分別壓縮文件的zip壓縮出來的文檔要小一些。

.tar.bz2 格式在Unix/Linux下面被廣泛的支持。并且其還被整合到一些tar工具中,這個(gè)格式采用了和.tar.gz不同的壓縮方法。所以其可以創(chuàng)建更加小的文件。

為了在Unix/Linux環(huán)境下更容易的使用,Text文件換行符,在.tar.gz和.tar.ba2文件中已經(jīng)被轉(zhuǎn)換成一個(gè)新行。

Boost CVS 庫(kù)
所有的Boost文檔,包括實(shí)體發(fā)行樹(代碼),包括網(wǎng)站HTML文檔都被CVS服務(wù)器管理。(Boost網(wǎng)站)提供了命令行,GUI,瀏覽器訪問方式。

通過命令行或者CVS客戶端訪問CVS
(Boost)庫(kù)可以從對(duì)那些安裝了CVS客戶端的,可以去訪問公共Boost CVS 倉(cāng)庫(kù)。Unix/Linux環(huán)境的用戶可以使用命令行來訪問,Windows,Mac或者其他環(huán)境的用戶則可以通過GUI來訪問。

請(qǐng)參考改良過的SourceForgeCVS使用指南第F節(jié)。它包含了各種各樣的客戶端的訪問鏈接。

常規(guī)的訪問方法如下:

cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/boost login
[Hit <return> when it asks for a password]
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/boost checkout boost
cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/boost logout
請(qǐng)閱讀你的CVS手冊(cè)來獲得更多的信息。

這種訪問是只讀的;如果你是一個(gè)庫(kù)的作者并且打算向CVS提交代碼,請(qǐng)聯(lián)系 相關(guān)人員。

通過網(wǎng)頁瀏覽器訪問Boost CVS
你可以近代的瀏覽器來訪問Boost CVS 文件   你可以通過顏色的不同看到一個(gè)文件被更新了多少次 注意:這個(gè)接口只是用來顯示個(gè)別文件的修改歷史 從CVS里的BoostBook產(chǎn)生文檔
一些Boost文檔產(chǎn)生自CVS倉(cāng)庫(kù)里面的BoostBook XML 代碼,這些代碼并沒有被轉(zhuǎn)換成可以閱讀的HTML參考文檔。可以訪問 Nightly Generated 文檔來查看通過"nightly build"生成的HTML文檔。

準(zhǔn)備
Boost推薦使用Boost.Build(Boost編譯生成系統(tǒng))來生成安裝Boost庫(kù)。 本文檔剩下的部分解釋它的用法。但是用不用這個(gè)系統(tǒng)就看你的需求了。注意,一些雖然庫(kù)同樣也包含了非Boost.Build的make文件或者工程文件。 但是Boost.Build卻包含了構(gòu)建Boost所需要的全部文件。

2 這個(gè)生成系統(tǒng)使用Boost.Jam,一個(gè) Perforce Jam 擴(kuò)展版本--這是make 一種輕量級(jí)的替代品。 推薦你去SourceForge 下載一個(gè)Boost.jam的可執(zhí)行文件 如果你所使用的環(huán)境沒有預(yù)先編譯好的可執(zhí)行的Boost.Jam或者如果你在使用一個(gè)還沒有發(fā)布的Boost源碼。那么你就需要 從代碼手動(dòng)生成bjam , 而bjam的代碼也包含在Boost的源碼樹里面。編譯好Boost.Jam以后,把bjam的執(zhí)行文件放在你的Boost根目錄下面就可以了。

配置編譯工具
在使用Boost.Build之前,你需要指定編譯工具,有兩種方法可以做到使得Build.System正常的工作。

用戶可以用常規(guī)的方法為它他算使用的每一套編譯工具集設(shè)置一套變量。 例如,設(shè)置Microsoft VC++, 就可以在PATH變量中添加...VC98/Bin 或者 .../VC7/Bin的路徑, 還需要編譯之前調(diào)用一次VCVAR32.BAT或者VSVAR32.BAT(這樣它就可以用VC來編譯Boost了)。 而使用CodeWarrior , 就應(yīng)該調(diào)用cwenv.bat,而且其他的Metrowerks工具/命令行工具也應(yīng)該在path變量中。 大多數(shù)的Unix系統(tǒng)都會(huì)預(yù)先配置好這些變量而不需要用戶來干預(yù)。


某一個(gè)用戶不打算讓他的變量被弄亂設(shè)置或者他也不是很了解他的編譯工具的配置。作為一種替代,他(她)可以設(shè)置一個(gè)變量指向她的編譯工具的安裝目錄, 這個(gè)變量可以事先在命令行環(huán)境變量里面聲明,或者在調(diào)用bjam時(shí)聲明, 知道定義好這個(gè)變量, 那些被用到的變量會(huì)被自動(dòng)的找到并且設(shè)置好。這個(gè)變量就是-s,例如:

bjam "-sGCC_ROOT_DIRECTORY=/usr/local/gcc-3.3.2"

一些變量,例如工具集變量TOOLS ,可以接收多個(gè)用空格分開的值。 其他的,比如上述的path,可以包含空格。對(duì)于一些環(huán)境,你還可以引用其他適當(dāng)?shù)脑O(shè)置方法(譯者注:這可能是說可以使用shell變量一類的東西)。

被支持的編譯工具
3 下面是Boost.Build支持的編譯工具,為了配置 那些工具,可以點(diǎn)擊最左邊的名字的鏈接。 

編譯工具名 說明
borland Borland C++
como Comeau C++ compiler front-end for non-Windows platforms
como-win32 Comeau C++ compiler front-end for Windows, using Microsoft Visual C++as a back-end.
cw Metrowerks CodeWarrior Pro 6.x, 7.x, 8.x, and 9.x command-line tools
darwin Apple Darwin OS hosted GNU GCC
dmc Digital Mars C++.
dmc-stlport Digital Mars C++, using the STLport standard library implementation
edg Edison Design Group compiler front-end (evaluation version)
gcc GNU GCC on Unix and Cygwin.
gcc-stlport GNU GCC on Unix and Cygwin, using the STLport standard library implementation
gcc-nocygwin GNU GCC Cygwin command line compiler tools running in "no-cygwin" mode (produces commercially redistributable objects)
intel-linux Intel C++ for Linux
intel-win32 Intel C++ for Windows using the Dinkumware standard library in the Intel-required Microsoft Visual C++ 6 or 7 installation
kcc KAI C++
kylix Borland C++ for Linux (Kylix).
mingw GNU GCC and associated tools in MinGW configuration (produces commercially redistributable objects)
mingw-stlport GNU GCC and associated tools in MinGW configuration (produces commercially redistributable objects), using the STLport standard library implementation
mipspro SGI MIPSpro C and C++
msvc Microsoft Visual C++ version 6 command-line tools. NOTE; For version 7.x (the .NET series) use the vc7, vc-7_1, or vc-8_0 toolsets below.
msvc-stlport Microsoft Visual C++ version 6 command-line tools, using the STLport standard library implementation. NOTE; For version 7.x (the .NET series) use the vc7-stlport or vc-7_1-stlport toolsets below.
sunpro SunPRO C++ compiler
tru64cxx Compaq C++ for Tru64 UNIX (versions prior to 6.5)
tru64cxx65 Compaq C++ Version 6.5 for Tru64 UNIX
vacpp IBM Visual Age C++ command-line tools
vc7 Microsoft Visual C++ command-line tools from Visual Studio .NET.
vc7-stlport Microsoft Visual C++ command-line tools from Visual Studio .NET + STLPort.
vc-7_1 Microsoft Visual C++ command-line tools from Visual Studio .NET 2003.
vc-7_1-stlport Microsoft Visual C++ command-line tools from Visual Studio .NET 2003 + STLPort.
vc-8_0 Microsoft Visual C++ command-line tools from Visual Studio .NET 2005.

Build and Install
共同的編譯安裝處理流程都是被top-level build文件(Jamfile)驅(qū)動(dòng)的。

4 首先你需要進(jìn)入你的Boost發(fā)行版的目錄,例如:

chdir boost-1.31.0
 

默認(rèn)情況下,Boost將試圖編譯全部的庫(kù)并且把庫(kù)和頭文件安裝到默認(rèn)的路徑中去。 在Unix系統(tǒng)中,默認(rèn)的路徑是"/usr/local"。 而Windows系統(tǒng)則是 "C:\Boost"。Boost庫(kù)將會(huì)被安裝到這些文件夾的“lib”子文件夾下面。 而頭文件則會(huì)被安裝到"<include/boost-1_33>"子文件夾里面。所有的這些設(shè)定都是來源于你所用的系統(tǒng)。

5 調(diào)用build system,指定 編譯工具來安裝,比如說,GNU/GCC。
bjam "-sTOOLS=gcc" install

如果你只打算生成庫(kù)并且把編譯好的庫(kù)收集到一個(gè)文件夾里面而不打算安裝它們。

bjam "-sTOOLS=gcc" stage
 

這個(gè)編譯和安裝系統(tǒng)可以通過一個(gè)GNU風(fēng)格的參數(shù)集合來控制。這些命令參數(shù)可以允許你指定安裝目錄,不安裝某一個(gè)庫(kù), 下面是這些命令和參數(shù)的一些介紹。你還可以用bjam --help"來查看這些參數(shù)。

bjam [options...] [install|stage]

動(dòng)作(命令)  
none 只生成Boost庫(kù),這個(gè)命令是讓你做install命令的第一個(gè)步驟用的。 這個(gè)命令通常不會(huì)拷貝生成好的庫(kù)到安裝目錄。
install 編譯安裝Boost的庫(kù)和頭文件。
stage 生成Boost庫(kù)并且把生成物拷貝到一個(gè)文件夾中。
參數(shù)  
--help 顯示命令的一些參數(shù)和語法的一些概要。
-sTOOLS=<toolsets> 指定編譯工具集列表,通常只需要一個(gè)編譯工具。
--prefix=PREFIX 安裝的目標(biāo)文件夾。
Win32默認(rèn): C:\Boost
Unix、Linux等默認(rèn): /usr/local
--exec-prefix=EPREFIX Install architecture dependent files here.(這個(gè)是做啥的不知道)
默認(rèn); PREFIX
--libdir=DIR 安裝庫(kù)的目標(biāo)文件夾。
默認(rèn): EPREFIX/lib
--includedir=DIR 安裝代碼頭文件的文件夾,Boost頭文件夾將會(huì)安裝在定義的文件夾的 "boost-<version>" 里面。
默認(rèn): PREFIX/include
--builddir=DIR 指定使用的生成文件夾,這將編譯代碼時(shí)產(chǎn)生的中間文件放到一個(gè)指定的路徑下而不用和代碼混在一起。 推薦!
--stagedir=DIR 如果只是使用state生成庫(kù)文件,這個(gè)變量指定這些庫(kù)將會(huì)被放在哪里。
默認(rèn); ./stage
--without-<library> 指定不編譯,安裝的庫(kù)。
--with-<library> 指定編譯、生成的庫(kù),這個(gè)變量改變默認(rèn)的生成所有的庫(kù)的設(shè)定,而 生成指定的庫(kù)。
--with-python-root[=PYTHON_ROOT] 用指定的Python開發(fā)包生成Boost.Python庫(kù),PYTHON_ROOT代表Python的開發(fā)包的目錄。 Boost.Python只在提供的PYTHON_ROOT有效的情況下才被編譯。
Win32環(huán)境默認(rèn): C:\Python24
Unix,Linux , Cygwin環(huán)境默認(rèn):/usr 
--with-python-version[=2.4] 生成Boost.Python庫(kù)的Python的版本。
默認(rèn): 2.4.
--with-pydebug 用Python的調(diào)試運(yùn)行環(huán)境編譯Boost.Python。 這是用Python的調(diào)試版來生成一個(gè)庫(kù)的附加集合。而同時(shí),常規(guī)的Boost.Python也會(huì)被生成。 
-sHAVE_ICU=1 Boost.Regex的Unicode版本依賴于ICU 庫(kù)。 而這個(gè)庫(kù)一定要在同一個(gè)編譯器下面生成并且安裝到編譯器所能找到的include和lib文件夾下面。 請(qǐng)參考 the Boost.Regex 安裝文檔. 獲得更多的信息。 
-sICU_PATH=path Boost.Regex的Unicode版本依賴于ICU 庫(kù)。而這個(gè)庫(kù)一定要在你所使用的同一個(gè)編譯器下面生成,如果你在安裝ICU的時(shí)候使用的prefix為 --prefix=/usr/local/icu/3.3,那么在這里,你就可以設(shè)置 -sICU_PATH=/usr/local/icu/3.3. 請(qǐng)參考 Boost.Regex 安裝文檔. 獲得更多的信息。 
-sNO_COMPRESSION=1 生成Boost.Iostreams庫(kù)的時(shí)候不使用外部的zlib和libbz2來生成壓縮庫(kù)。 如果你用Windows,那么這個(gè)選項(xiàng)默認(rèn)為1(就是不生成壓縮庫(kù));如果你用unix,則壓縮庫(kù)很有可能默認(rèn)就被生成了,所以如果這個(gè)參數(shù)不起作用, 你可以參考Boost.Iostreams安裝文檔 

這里有一些 Boost.Build 和 Boost.Jam 支持的附加參數(shù)。其中最重要的可能就是"-sBUILD="。 這個(gè)參數(shù)允許你覆蓋默認(rèn)的編譯目標(biāo)。參數(shù)值"<features/variants>" 是一個(gè)用空格分隔的列表。features以一個(gè)tag和一個(gè)或多個(gè)值的方式出現(xiàn);variant則是features集合做附加說明的一個(gè)簡(jiǎn)單的符號(hào)名 字。例如默認(rèn)的編譯目標(biāo)是 "debug release <runtime-link>static/dynamic <threading>single/multi" 其中"debug" 和 "release"就是variant,那么每一個(gè)features都會(huì)帶有這兩個(gè)variant.

如果你有些關(guān)于編譯安裝處理的一件。請(qǐng)寫信給Boost.Build mailing list 我們會(huì)認(rèn)真的閱讀您提出的意見。

生成物
生成物包括:靜態(tài)庫(kù),動(dòng)態(tài)庫(kù),而不同的環(huán)境會(huì)讓庫(kù)的名稱也不一樣。一個(gè)簡(jiǎn)單的Boost庫(kù)默認(rèn)將會(huì)產(chǎn)生八個(gè)不同的庫(kù)。 例如Boost.Datetime庫(kù)在Unix 類系統(tǒng)下面將會(huì)被處理成:

libboost_date_time-gcc-d-1_31.so
libboost_date_time-gcc-mt-d-1_31.so
libboost_date_time-gcc-1_31.so
libboost_date_time-gcc-mt-1_31.so
libboost_date_time-gcc-d-1_31.a
libboost_date_time-gcc-mt-d-1_31.a
libboost_date_time-gcc-1_31.a
libboost_date_time-gcc-mt-1_31.a

· 庫(kù)前綴
  
lib · 庫(kù)名稱
 
boost_date_time · 編譯工具
 
- gcc · 線程模式
 
- mt · 運(yùn)行模式
 
- d · Boost 版本
 
- 1_31 · 庫(kù)類型
 
.a  

庫(kù)前綴
一些系統(tǒng)要求庫(kù)應(yīng)該具有“lib”前綴,例如Unix,和其他的例如在Winodws運(yùn)行的GCC,因此在所有的Unix類型的系統(tǒng)和Windows上使用的Boost靜態(tài)庫(kù)上面都會(huì)被加上這個(gè)前綴。 而Unix共享庫(kù),和windows靜態(tài)庫(kù)則被分別命名為

lib*.so
lib*.a
而Winodws的共享庫(kù)則沒有prefix前綴來區(qū)別“import libraries”和"static libraries"。因此在Windows下面, 共享庫(kù)被命名為:

*.dll 共享庫(kù)版本
*.lib dll(共享庫(kù))的"Import library"
lib*.lib "Static library"版本

 


庫(kù)名稱
Boost"會(huì)用boost_" 前綴來命名庫(kù)用以區(qū)別您的系統(tǒng)上其他的庫(kù)。

編譯工具
編譯工具名字是你基于你所使用的的編譯工具的縮寫。這個(gè)縮寫由編譯器的名稱(2-4個(gè)字符)和該編譯器的大小出版號(hào)組成的。 。舉一個(gè)例子如果你的編譯工具是"gcc-3_2_3" 那么編譯工具的tag就會(huì)是"gcc32"。各個(gè)編譯器的縮寫如下:

編譯工具名稱 縮寫
borland bcb
como como
como-win32 como
cw cw
darwin osx
dmc dmc
dmc-stlport dmc
edg edg
gcc gcc
gcc-stlport gcc
gcc-nocygwin gcc
intel-linux il
intel-win32 iw
kcc kcc
kylix bck
mingw mgw
mingw-stlport mgw
mipspro mp
msvc vc
msvc-stlport vc
sunpro sw
tru64cxx tru
tru64cxx65 tru
vacpp xlc
vc7 vc
vc7-stlport vc
vc-7_1 vc
vc-7_1-stlport vc
vc-8_0 vc
Others The first part of the toolset name.

線程模式
這個(gè)tag標(biāo)志著這個(gè)庫(kù)所支持的線程。如果多線程被支持,那么這個(gè)tag就會(huì)被加上"-mt",反之則不加。

運(yùn)行時(shí)
這定義了編譯好的庫(kù)的“compiled against”的運(yùn)行時(shí)類型和編譯時(shí)其二進(jìn)制編碼目標(biāo)。每一中運(yùn)行時(shí)類型和和生成代碼參數(shù)都用一個(gè)字母表示。

關(guān)鍵字 特征
s 靜態(tài)鏈接庫(kù)
g 調(diào)試運(yùn)行庫(kù)
y 調(diào)試Python系統(tǒng)
d 激活調(diào)試代碼
p STLport運(yùn)行時(shí)庫(kù),代替宿主編譯器的運(yùn)行時(shí)庫(kù)
n STLport運(yùn)行時(shí)庫(kù)使用“本地”IO流代替STLportIO流

舉一個(gè)例子,如果你用STLport和本地的IO流庫(kù)來編譯一個(gè)調(diào)試模式的庫(kù),那么這個(gè)庫(kù)的命名就是 "-sgdpn"。

Boost 版本
這標(biāo)志著Boost庫(kù)的版本號(hào)碼。由主版本號(hào)和副版本號(hào)和一個(gè)下劃線組成。例如1.31.0對(duì)應(yīng)的就是

舉一個(gè)例子,如果你用STLport和本地的IO流庫(kù)來編譯一個(gè)調(diào)試模式的庫(kù),那么這個(gè)庫(kù)的命名就是 "-1_31"。如果這里面還包括了補(bǔ)丁號(hào),比如說1.31.1,那么就命名為"-1_31_1"

庫(kù)類型
這標(biāo)識(shí)了庫(kù)的類型,這時(shí)根據(jù)環(huán)境不同而不同的。在windows上面共享庫(kù)是.dll 靜態(tài)庫(kù)則是".lib"。在unix上面靜態(tài)庫(kù)是".a",動(dòng)態(tài)庫(kù)是".so"。 一些編譯工具在Unix還會(huì)支持全版本號(hào)(例如".so.1.31.0")的符號(hào)鏈接。

在Windows自動(dòng)鏈接
Boost擁有自動(dòng)鏈接的特性,即:只要你include了庫(kù)的頭文件就可以鏈接到正確的庫(kù)。 為了這個(gè)特性,你所使用的編譯器一定要支持#pragma comment(lib, name) Microsoft Visual C++, Intel C++, Metrowerks C++ , 和 Borland C++ 都支持這個(gè))。

如果你鏈接到動(dòng)態(tài)運(yùn)行庫(kù),那么你可以選擇鏈接到靜態(tài)鏈接庫(kù)和動(dòng)態(tài)鏈接庫(kù)的其中任意一個(gè), 默認(rèn)是靜態(tài)鏈接,你可以定義 BOOST_WHATEVER_DYN_LINK宏 強(qiáng)制使Boost鏈接到動(dòng)態(tài)鏈接庫(kù)。

這個(gè)特性可以利用BOOST_WHATEVER_NO_LIB強(qiáng)制關(guān)閉,或者在Boost全局定義BOOST_ALL_NO_LIB

如果你打算觀察庫(kù)的鏈接情況,那么就可以定義BOOST_LIB_DIAGNOSTIC。 然后使用#pragma message 來觀察選擇庫(kù)的情況。

這里有一些Boost庫(kù)(Boost.Test 一個(gè)測(cè)試特例) 是不支持自動(dòng)鏈接的,至于技術(shù)原因,請(qǐng)參考每一個(gè)庫(kù)的文檔,而 Boost.Config 文檔提供了更多的配置macro的信息。 下面的列表是當(dāng)前支持的配置 (只有頭文件的庫(kù)沒有列在這里):

Library Static Link Dynamic Link Default linkage Automatic library selection Comments
Date-Time Yes Yes static Yes  
Filesystem Yes Yes
 static Yes  
Graph Yes No static No   The separate Graph library source is needed only when reading an AT&T graphviz file.
Iostreams Yes Yes
 static Yes  
Program Options Yes Yes static Yes  
Python Yes Yes dynamic No Since all Python extensions are DLL's it makes sense to dynamic link to the Boost Python library by default (static linking is only really an option if you are embedding python).
Regex Yes Yes static Yes  
Serialization Yes Yes static Yes  
Signals Yes Yes static Yes  
Test Yes No static No Which library you link to depends upon which program entry point you define, rather than which Boost.Test features you use.
Thread Partial Yes static (Visual C++), otherwise dynamic Yes For technical reasons static linking is supported on only one Windows compiler (Visual C++).
Wave Yes Yes static Yes  

 

附加的步驟
根據(jù)環(huán)境的不同,你可能在安裝配置Boost之前進(jìn)行一些附加的配置。

Depending on your platform and configuration you may need to perform some additional configuration to get Boost to build and install.

配置Boost源代碼 在大多數(shù)環(huán)境下可能不需要這一步,但是如果你打算在Boost沒有支持、測(cè)試過的環(huán)境下生成Boost庫(kù), 那么這一步就是必須的。


如果Boost.Build檢測(cè)到你的Python的安裝有問題,那么Boost.Build將會(huì)打印一些短消息來告訴你如何配置才能找到Python。 更多的信息可以看更詳細(xì)的Python指令.

--------------------------------------------------------------------------------

Revised $Date: 2005/11/23 14:09:43 $

Copyright © Rene Rivera 2003.
Copyright © Jens Maurer 2001.
Copyright © John Maddock 2004.

Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at www.boost.org/LICENSE_1_0.txt)

 

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=930489

在WindowsXP下 VC6.0 編譯安裝Boost庫(kù)2006-12-08 12:34(zz)首先從Boost的老巢http://www.boost.org/下載。下載完成以后是一個(gè)安裝文件(其實(shí)就是進(jìn)行自動(dòng)解壓縮的)。選擇你的目錄解壓縮Boost庫(kù)。然后我們開始對(duì)其進(jìn)行編譯我所下載的版本是1.33.1。1.cmd2.進(jìn)入安裝VC的目錄例如c:\Program Files\Microsoft Visual Studio\VC98\Bin目錄3.運(yùn)行VCVARS32.BAT(這個(gè)操作的作用是對(duì)此控制臺(tái)注冊(cè)VC的環(huán)境變量,這樣我們就可以在任意目錄使用cl進(jìn)行編譯程序)。4.進(jìn)入Boost的目錄例如c:\boost_1_33_1\tools\build\jam_src5.修改build.bat腳本的參數(shù)(如果必要的話,你的安裝目錄不是c:盤)   將原參數(shù)   if EXIST "C:\Program Files\Microsoft Visual Studio\VC98\bin\VCVARS32.BAT" (      set BOOST_JAM_TOOLSET=msvc      set BOOST_JAM_TOOLSET_ROOT=C:\Program Files\Microsoft Visual Studio\VC98\   goto :eof)  修改為(就是你的VC6.0安裝的目錄,我這里舉個(gè)例子)   if EXIST "D:\Program Files\Microsoft Visual Studio\VC98\bin\VCVARS32.BAT" (      set BOOST_JAM_TOOLSET=msvc      set BOOST_JAM_TOOLSET_ROOT=D:\Program Files\Microsoft Visual Studio\VC98\   goto :eof)6.在剛才打開的控制臺(tái)下運(yùn)行  D:\d\boost_1_33_1\tools\build\jam_src\build.bat  最終會(huì)在目錄下生成一個(gè)名為bin.ntx86的文件夾里面包含一個(gè)bjam.exe可執(zhí)行文件,將其拷貝到D:\boost_1_33_1目錄下7.安裝python可以在www.python.org獲得8.設(shè)置環(huán)境變量SET MSVC_ROOT="c:\Program Files\Microsoft Visual Studio\VC98" SET VISUALC="c:\Program Files\Microsoft Visual Studio\VC98" SET JAM_TOOLSET=VISUALCSET PYTHON_ROOT=D:\Program Files\Python23SET PYTHON_VERSION=2.39開始編譯bjam -sTOOLS=msvc install(將會(huì)安裝在默認(rèn)目錄C:\Boost)這樣編譯就完成了10.boost類庫(kù)在VC6.0的IDE環(huán)境中的配置Tools” -> “Options” -> “Diretories” -> “Show Diretories for”中的下拉框選擇:1) 在Include files 中添加C:\BOOST\INCLUDE\BOOST-1_33_1\BOOST目錄。2) 在Library files  中添加C:\BOOST\LIB目錄。11.測(cè)試如果你不能確定,你的編譯是否成功。就需要進(jìn)行一下測(cè)試,拿正則表達(dá)式類為例。測(cè)試如下程序 #include "stdafx.h"#include <cstdlib>#include <stdlib.h>#include <boost/regex.hpp>#include <string>#include <iostream>using namespace std;using namespace boost;regex expression("^select ([a-zA-Z]*) from ([a-zA-Z]*)");int main(int argc, char* argv[]){     std::string in;     cmatch what;     cout << "enter test string" << endl;     getline(cin,in);     if(regex_match(in.c_str(), what, expression))     {           for(int i=0;i<what.size();i++)           cout<<"str :"<<what[i].str()<<endl;     }     else     {        cout<<"Error Input"<<endl;     }        return 0;}輸入:select name from database;輸出:str:select name from table   str:name   str:table這樣就完成了單個(gè)庫(kù)編譯方法:(以regex為例)編譯boost.regex的另一種辦法 1.運(yùn)行vcvars32.bat,可以幫助設(shè)置好vc命令行環(huán)境 2.cd boost_1_33_1\libs\regex\build 3.nmake -vc6.mak這種方式可以只編譯regex 這時(shí)會(huì)在當(dāng)前目錄下生成vc6目錄,里面有已編譯好的lib和dll文件, 這樣以后的步驟中可以設(shè)置regex庫(kù)時(shí)指向這里, 包含文件需要設(shè)置到boost_1_33_1目錄 另修正補(bǔ)充: 用bjam編譯regex時(shí),選項(xiàng)-sTOOLS=vc7中vc7改成vc71,否則下面最終生成工程時(shí)需要改個(gè)文件名( libboost_regex-vc7-mt-sgd-1_33_1.lib -> libboost_regex-vc71-mt-sgd-1_33_1.lib)

本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/wanfustudio/archive/2006/10/20/1343112.aspx