頭文件就是庫
使用者最常問的問題就是“我該怎么安裝Boost”,這個也是我一開始最關心的問題,Boost這點做的很好,將大部分實現都封裝在頭文件里,所以對於一些基本的Boost庫,其實是不需要安裝的,只需要將頭文件include到自己的程序里,當然前提是你把Boost的所有用到的頭文件都拷貝了一份。
Boost是如何做到這點的?
這是因為Boost的頭文件(*.hpp)包含了模板和內聯函數,這點隨便找一個hpp文件來看你就明白了,所以不需要去靜態鏈接活動態鏈接二進制lib庫了。
不過Boost的某些庫還是需要生成二進制的庫的,如果你要使用他們,必須編譯安裝哦,他們是:
Boost.Filesystem
Boost.IOStreams
Boost.ProgramOptions
Boost.Python
Boost.Regex
Boost.Serialization
Boost.Signals
Boost.Thread
Boost.Wave
命名規則
libboost_filesystem-vc80-mt-sgdp-1_42.lib
前綴:統一為lib,但在Windows下只有靜態庫有lib前綴;
庫名稱:以"boost一”開頭的庫名稱,在這里是boost_filesystem;
編譯器標識:編譯該庫文件的編譯器名稱和版本,在這里是-vc80;
多線程標識:支持多線程使用-mt,沒有表示不支持多線程;
ABI標識:這個標識比較復雜,標識了Boost庫的幾個編譯鏈接選項;
s: 靜態庫標識;
gd:debug版標識;
p: 使用STlport而不是編譯器自帶STL實現;
版本號:Boost庫的版本號,小數點用下畫線代替,在這里是1_42;
擴展名:在Windows上是lib,在Linux等類Unix操作系統上是a或者.so。
幾個常用宏
#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編譯的方法
可以采用預編譯頭來解決這個問題。
http://blog.csdn.net/huang_xw/article/details/7841619