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

下載
1 Boost庫通過SourceForge文件發布系統來進行發布。可以 從SourceForge下載得到Boost發行版. 并把它解壓縮到一個合適的地方。

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

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

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

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

為了在Unix/Linux環境下更容易的使用,Text文件換行符,在.tar.gz和.tar.ba2文件中已經被轉換成一個新行。

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

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

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

常規的訪問方法如下:

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
請閱讀你的CVS手冊來獲得更多的信息。

這種訪問是只讀的;如果你是一個庫的作者并且打算向CVS提交代碼,請聯系 相關人員。

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

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

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

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

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


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

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

一些變量,例如工具集變量TOOLS ,可以接收多個用空格分開的值。 其他的,比如上述的path,可以包含空格。對于一些環境,你還可以引用其他適當的設置方法(譯者注:這可能是說可以使用shell變量一類的東西)。

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

編譯工具名 說明
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)驅動的。

4 首先你需要進入你的Boost發行版的目錄,例如:

chdir boost-1.31.0
 

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

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

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

bjam "-sTOOLS=gcc" stage
 

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

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

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

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

如果你有些關于編譯安裝處理的一件。請寫信給Boost.Build mailing list 我們會認真的閱讀您提出的意見。

生成物
生成物包括:靜態庫,動態庫,而不同的環境會讓庫的名稱也不一樣。一個簡單的Boost庫默認將會產生八個不同的庫。 例如Boost.Datetime庫在Unix 類系統下面將會被處理成:

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

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

庫前綴
一些系統要求庫應該具有“lib”前綴,例如Unix,和其他的例如在Winodws運行的GCC,因此在所有的Unix類型的系統和Windows上使用的Boost靜態庫上面都會被加上這個前綴。 而Unix共享庫,和windows靜態庫則被分別命名為

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

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

 


庫名稱
Boost"會用boost_" 前綴來命名庫用以區別您的系統上其他的庫。

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

編譯工具名稱 縮寫
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.

線程模式
這個tag標志著這個庫所支持的線程。如果多線程被支持,那么這個tag就會被加上"-mt",反之則不加。

運行時
這定義了編譯好的庫的“compiled against”的運行時類型和編譯時其二進制編碼目標。每一中運行時類型和和生成代碼參數都用一個字母表示。

關鍵字 特征
s 靜態鏈接庫
g 調試運行庫
y 調試Python系統
d 激活調試代碼
p STLport運行時庫,代替宿主編譯器的運行時庫
n STLport運行時庫使用“本地”IO流代替STLportIO流

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

Boost 版本
這標志著Boost庫的版本號碼。由主版本號和副版本號和一個下劃線組成。例如1.31.0對應的就是

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

庫類型
這標識了庫的類型,這時根據環境不同而不同的。在windows上面共享庫是.dll 靜態庫則是".lib"。在unix上面靜態庫是".a",動態庫是".so"。 一些編譯工具在Unix還會支持全版本號(例如".so.1.31.0")的符號鏈接。

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

如果你鏈接到動態運行庫,那么你可以選擇鏈接到靜態鏈接庫和動態鏈接庫的其中任意一個, 默認是靜態鏈接,你可以定義 BOOST_WHATEVER_DYN_LINK宏 強制使Boost鏈接到動態鏈接庫。

這個特性可以利用BOOST_WHATEVER_NO_LIB強制關閉,或者在Boost全局定義BOOST_ALL_NO_LIB

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

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

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  

 

附加的步驟
根據環境的不同,你可能在安裝配置Boost之前進行一些附加的配置。

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

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


如果Boost.Build檢測到你的Python的安裝有問題,那么Boost.Build將會打印一些短消息來告訴你如何配置才能找到Python。 更多的信息可以看更詳細的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庫2006-12-08 12:34(zz)首先從Boost的老巢http://www.boost.org/下載。下載完成以后是一個安裝文件(其實就是進行自動解壓縮的)。選擇你的目錄解壓縮Boost庫。然后我們開始對其進行編譯我所下載的版本是1.33.1。1.cmd2.進入安裝VC的目錄例如c:\Program Files\Microsoft Visual Studio\VC98\Bin目錄3.運行VCVARS32.BAT(這個操作的作用是對此控制臺注冊VC的環境變量,這樣我們就可以在任意目錄使用cl進行編譯程序)。4.進入Boost的目錄例如c:\boost_1_33_1\tools\build\jam_src5.修改build.bat腳本的參數(如果必要的話,你的安裝目錄不是c:盤)   將原參數   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安裝的目錄,我這里舉個例子)   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.在剛才打開的控制臺下運行  D:\d\boost_1_33_1\tools\build\jam_src\build.bat  最終會在目錄下生成一個名為bin.ntx86的文件夾里面包含一個bjam.exe可執行文件,將其拷貝到D:\boost_1_33_1目錄下7.安裝python可以在www.python.org獲得8.設置環境變量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(將會安裝在默認目錄C:\Boost)這樣編譯就完成了10.boost類庫在VC6.0的IDE環境中的配置Tools” -> “Options” -> “Diretories” -> “Show Diretories for”中的下拉框選擇:1) 在Include files 中添加C:\BOOST\INCLUDE\BOOST-1_33_1\BOOST目錄。2) 在Library files  中添加C:\BOOST\LIB目錄。11.測試如果你不能確定,你的編譯是否成功。就需要進行一下測試,拿正則表達式類為例。測試如下程序 #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這樣就完成了單個庫編譯方法:(以regex為例)編譯boost.regex的另一種辦法 1.運行vcvars32.bat,可以幫助設置好vc命令行環境 2.cd boost_1_33_1\libs\regex\build 3.nmake -vc6.mak這種方式可以只編譯regex 這時會在當前目錄下生成vc6目錄,里面有已編譯好的lib和dll文件, 這樣以后的步驟中可以設置regex庫時指向這里, 包含文件需要設置到boost_1_33_1目錄 另修正補充: 用bjam編譯regex時,選項-sTOOLS=vc7中vc7改成vc71,否則下面最終生成工程時需要改個文件名( libboost_regex-vc7-mt-sgd-1_33_1.lib -> libboost_regex-vc71-mt-sgd-1_33_1.lib)

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/wanfustudio/archive/2006/10/20/1343112.aspx