在Windows下 Build Boost線程庫
作者:伐木工
Boost庫中許多都是在.hpp中實作的,隻要包含路徑就可以直接就拿來使用。但是仍然有一些需要build為目标庫才能夠使用,包括Python,正規表達式和多線程庫。
折騰了幾天,終于将Boost的多線程庫搞定了,現在就将我得方法寫出來,希望能給遇到麻煩的朋友一些參考。
環境
下面是我的一些安裝路徑,在安裝過程中需要根據實際情況調整:
作業系統:Win2000
VC6: F:/Microsoft Visual Studio/VC98
BOOST: F:/boost_1_27_0
安裝Jam
Build Boost線程庫需要使用工具Boost.Jam。工欲善其事,必先利其器。現在先來看看如何安裝Jam。
指令行:
F:/boost_1_27_0> set VISUALC=""F:/Microsoft Visual Studio/VC98""
F:/boost_1_27_0> set JAM_TOOLSET=VISUALC
F:/boost_1_27_0/tools/jam_src>nmake -f bulids/win32-visualc.mk
說明:
首先是設定環境變量VISUALC和JAM_TOOLSET。VISUALC中有兩個雙引号是為了能夠識别空格。如果你的VC安裝路徑不含空格就不必加上雙引号了: set VISUALC=F:/visual/VC98。
接着就是使用nmake指令編譯了。不同的作業系統和不同的開發工具對應不同的mk檔案,都在tools/jam_src/builds/目錄下。
如果你使用的VC7的話就會有問題,由于編譯過程中要使用到advapi32.lib這個檔案,VC6中是在vc98/lib/目錄下,而VC7是在platformsdk/lib/,這樣就會找不到路徑。由于沒有仔細研究Jam,不知道在哪裡修改這個路徑,隻好請大家自己動手了。
如果不想讓系統的環境變量變得雜亂不堪,可以用set VISUAL=指令将變量清除。
完成之後,就可以在/tools/build/jam_src下看見一個新的目錄,bin.ntx86,其中就包含了jam.exe。
Build
現在該開始建立Boost線程目标庫了。
指令行:
f:/boost_1_27_0>set Path=%PAHT:~0%;F:/boost_1_27_0/tools/build/jam_src/bin.ntx86
f:/boost_1_27_0> set VISUALC="F:/Micors~1/VC98"
f:/boost_1_27_0> jam -sBOOST_ROOT=. -sTOOLS=msvc
說明:
首先将jam.exe的路徑加入Path變量中。
接着設定VISUALC,這裡和安裝Jam時不同,請注意,用的DOS檔案名。
最後就是執行jam,-sBOOST_ROOT=.表示Boost的根目錄是目前目錄,-sTOOLS=msvc指明了工具名稱,這些名稱都是特定的,具體可以通路boost網站查詢。
build需要花些時間,可能還會有不少錯誤,但可以不必管他。
完成之後,就會發現/libs/thread/build/bin/目錄下多了多了兩個檔案夾,libboost_thread和libboost_threadmon,其中就可以找到完成lib檔案和dll檔案。
使用
首先在VC中加入路徑:
tools->option中Directories屬性頁中加入:
F:/BOOST_1_27_0/LIBS/THREAD/BUILD/BIN/LIBBOOST_THREADMON/MSVC/RELEASE/RUNTIME-LINK-DYNAMIC/THREADING-MULTI
F:/BOOST_1_27_0/LIBS/THREAD/BUILD/BIN/LIBBOOST_THREAD/MSVC/RELEASE/RUNTIME-LINK-DYNAMIC/THREADING-MULTI
在工程中加入lib檔案:
在project->setting中link屬性頁加入使用的lib:libboost_thread.lib libboost_threadmon.lib
定義BOOST_HAS_THREADS宏,不然就會有如下錯誤:Thread support is unavailable!
選擇多線程運作庫
在project->setting->C/C++->Code Generation中Use run-time library下拉框中選Multithreaded DLL
好了,現在就可以體會Boost線程庫帶給我們的全新感受了。
由于我也是剛剛才接觸Boost,對Boost和Jam工具還不是很了解,不敢妄加評論,以免贻笑大方,是以隻是簡單的列出了我方法,如果有什麼不對的地方請大家指出。