Boost C Libraries 基本上是一個免費的 C 的跨平台函式庫集合,基本上應該可以把它視為 C STL 的功能再延伸;他最大的特色在於他是一個經過「同行評審」(peer review,可參考維基百科)、開放原始碼的函式庫,而且有許多 Boost 的函式庫是由 C 標準委員會的人開發的,同時部分函式庫的功能也已經成為 C TR1 (Technical Report 1,參考維基百科)、TR2、或是 C 0x 的標準了。
它的官方網站是:http://www.boost.org/,目前最新版本是 1.44.0(2010/08/13),包含了 104 個不同的 library;由於他提供的函式庫非常地多,的內容也非常地多元,根據官方的分類,大致上可以分為下面這二十類:
- 字串和文字處理(String and text processing)
- 容器(Containers)
- Iterators
- 演算法(Algorithms)
- Function objects and higher-order programming
- 泛型(Generic Programming)
- Template Metaprogramming
- Preprocessor Metaprogramming
- Concurrent Programming
- 數學與數字(Math and numerics)
- 正確性與測試(Correctness and testing)
- 資料結構(Data structures)
- 影像處理(Image processing)
- 輸入、輸出(Input/Output)
- Inter-language support
- 記憶體(Memory)
- 語法分析(Parsing)
- 程式介面(Programming Interfaces)
- 其他雜項
- Broken compiler workarounds
其中每一個分類,又都包含了一個或多個函式庫,可以說是功能相當豐富。
基本建置
而實際上,大部分的 Boost C 函式庫都是所謂「header only」的∼也就是說,要使用 Boost 的話,只需要準備好他的 header 檔(Boost 都是用「.hpp」這個附檔名),不需要額外進行編譯就可以用了!這點雖然會多增加一點程式編譯階段時所需的時間,但是在準備開發環境的時候,算是相當方便的一件事。
不過,有部分的函式褲還是需要先編譯的。在官方的網頁上,就有列出了十二個必須要預先編譯的函式庫,包括了: Filesystem、GraphParallel、IOStreams、MPI、ProgramOptions、Python、Regex、Serialization、Signals、System、Thread、Wave。除此之外,像 DateTime、Graph、Math、Random、Test 這五項,則是可能會需要編譯的函式庫。
而如果要建置 Boost C Libraries 的話,步驟也相當簡單。Boost 本身有提供一個 bjam 的建置工具(官方文件),透過這個工具,就可以輕鬆地建置出 Boost 裡面可以預先編譯的函式庫了∼在最簡單的狀況下,只要使用 Visual Studio 的命令提示字元(Command Prompt),進到 Boost 的目錄下,執行:
bootstrap
.\bjam
這兩個指令就可以了!
第一行的 bootstrap 基本上是用來建置 bjam 用的,下了這個指令後,就會開始建置 Boost 的 bjam 建置引擎(build engine);第二行就是執行 bjam,來編譯、建置 Boost 裡可以預先編譯的函式庫了∼這樣建置產生的出來的檔案全部都是 .lib 檔,預設會放在「stagelib」這個目錄下。
Boost 建置出來的 lib 檔檔名都滿長的,包含了版本編號以及各種組態的名稱,例如:「libboost_iostreams–vc100–mt–gd-1_44.lib」,開頭的 libboost_iostreams 就是代表他是 boost 裡的 iostreams 函式庫,vc100 則是代表是用 Visual C 10.0(2010)建置出來的,mt 則是 multi-thread,gd 應該是代表他是 debug 版、有產生偵錯的資訊,最後的 1_44 就是 Boost 的版本了∼而如果有自行設定其他的編譯參數的話,產生出來的檔案檔名,也會有所不同的。
那檔案名稱這麼複雜,要 link 的時候會很麻煩嗎?其實不會。Boost 有提供所謂「auto linking」的功能(參考官方網站),可以自動地完成 linking 的動作(附註 1);像以 Visual C 在使用 Boost 時,只要有正確地在專案的「Additional Library Directories」裡加上 Boost 的 lib 檔的所在路徑,建置程式時他就會自動去找到對應的 .lib 檔做連結了∼這點算是相當方便的∼
進階建置設定
而 bjam 本身也還有許多參數可以指定,有特殊需要的話,可以參考官方文件的說明。Heresy 這邊舉幾個自己有用到的:
-a
|
重建所有東西 |
-j N
|
指定編譯時一次執行 N 個指令,在多核心的電腦上可以藉此加快編譯的速度。 |
address-model=32 / 64
|
指定要編譯 32 位元或 64 位元的程式。 |
variant=debug / release
|
指定要建置 debug 版或 release 版,不指定的話就會都建置。 |
–stagedir=<STAGEDIR>
|
指定建置完後的 lib 檔要放在哪裡,預設是 ./stage |
像 Heresy 這邊建置 Boost 的話,32 位元的指令就是
bjam –stagedir=lib32 -j 4
而 64 位元的指令則是
bjam address-model=64 –stagedir=lib64 -j 4
其他:
這篇大概就先寫到這了。接下來,Heresy 應該會把一些自己有在用的 Boost Library 整理一些簡單的教學、範例出來,不過基本上,應該不可能全部都寫就是了。 XD
畢竟,整個 Boost 太大、也太雜了,真要完全都玩過一次,基本上應該不太可能吧。 ^^"
附註:
- auto linking 只適用於有支援的編譯器,大部分 Windows 的編譯器都支援,但是 GCC 不支援。
- auto linking 實際上的寫法很簡單,就是「#pragma comment( lib, "XXX.lib")」
期待你的教學與範例上了官網看了下,好多模組不知道從何下手還是等待你的範例吧。
其實可以用CMAKE Build 速度會比較快