1. 下載並解壓Boost C++ Libshtml
下載地址:python
SourceForge:http://sourceforge.net/projects/boost/files/boost/1.48.0/linux
Boost Official:http://www.boost.org/users/history/version_1_48_0.html (實際上也是從SourceForge下載)ios
解壓到 E:\boost_1_48_0c++
發現上面的版本編譯不出64位,只有32位,哪怕指定了--address-model=64git
能夠去https://www.boost.org/users/history/ 這邊下一個boost_1_48_0,在試試看bootstrap
推薦使用boost_1_66_0 可以生成64位和32位的windows
2. 編譯多線程
咱們須要對全部 編譯器版本(Visual Studio 20** Command Prompt對應的編譯器版本(區分32和64位)+toolset的指定)+32/64版本+debug/release版本 各執行一次編譯函數
打開VS2008,在菜單欄「工具」選擇「Visual Studio 2008 Command Prompt」,在彈出的控制檯中,輸入:
C:\Users\Michael>E: E:\>cd boot_1_48_0 E:\>bootstrap.bat E:\>b2 stage --build-type=complete --toolset=msvc-9.0 --address-model=32 --variant=debug --threading=multi --link=static --runtime-link=shared --build-dir=".\bin.v2.vc2008_x86_d" --stagedir=".\"
E:\>b2 stage --build-type=complete --toolset=msvc-9.0 --address-model=32 --variant=release --threading=multi --link=static --runtime-link=shared --build-dir=".\bin.v2.vc2008_x86_r" --stagedir=".\"
在菜單欄「工具」選擇「Visual Studio 2008 x64 Win64 Command Prompt」,在彈出的控制檯中,輸入:
C:\Users\Michael>E:
E:\>cd boot_1_48_0 E:\>bootstrap.bat E:\>b2 stage --build-type=complete --toolset=msvc-9.0 --address-model=64 --variant=debug --threading=multi --link=static --runtime-link=shared --build-dir=".\bin.v2.vc2008_x64_d" --stagedir=".\"
E:\>b2 stage --build-type=complete --toolset=msvc-9.0 --address-model=64 --variant=release --threading=multi --link=static --runtime-link=shared --build-dir=".\bin.v2.vc2008_x64_r" --stagedir=".\"
每一條b2大概執行一個小時。且每一條b2,雖然32位、64位、debug、release不一樣的組合編譯設置,但編譯出來的東西是同樣的,爲何?
由於--build-type=complete,在boost_1_66_0中,決定了能夠編譯全部的--threading、--runtime-link、--variant、--address-model、--link;在boost_1_48_0中,決定了能夠編譯全部的--variant、--link,但--threading=multi、--runtime-link=shared、--address-model=32(能夠經過查看編譯出來的dll是否爲32位仍是64位)。可是--toolset默認使用系統安裝的最高版本的VC,跟用例如Visual Studio的Visual Studio 2008 x64 Win64 Command Prompt命令提示符不要緊。
中間文件都在bin.v2*目錄下
bootstrap.bat用來完成編譯前的配置工做。如生成bjam.exe和b2.exe bjam.exe 是老版本,b2是bjam的升級版本,都是可行的
其中「--toolset=msvc-9.0」表示編譯成VS 9.0版本,由於VS 2008爲VS 9.0版本,若是是VS 2010,則用「--toolset=msvc-10.0」參數。
(1)b2 stage --build-type=complete --toolset=msvc-10.0 或者(2)bjam.exe stage --build-type=complete --toolset=msvc-10.0。,推薦使用(1)
complete是個生成全部當前系統上有的編譯器的調試版和發行版的靜態庫和動態庫的過程。最後大小在windows上是5G樣子。
若是:
目標位置如./stage/lib下有存在的結果文件了,則直接跳過編譯和跳過拷貝操做。
目標位置如./stage/lib下沒有存在的結果文件,則直接跳過編譯,但執行從./bin.v2文件夾下拷貝相應的文件操做。
./bin.v2文件夾不存在,則會執行編譯。因此在每次編譯的時候,最好要把這個文件夾刪除,且把./stage/lib這個已經存在的文件夾更名。
編譯是很漫長的過程,若是你只須要使用Boost庫的一部分,能夠選擇性地編譯。好比你只想用system,thread庫,則輸入:
E:\>bjam --toolset=msvc-9.0 --with-system -with-thread
下面詳細解釋一下每一個參數的含義:
stage/install:stage 表示只生成庫(dll和lib),install還會生成包含頭文件的include目錄。本人推薦使用stage,由於install生成的這個include 目錄實際就是boost安裝包解壓縮後的boost目錄(E:\SDK\boost_1_39_0\boost,只比include目錄多幾個非hpp文件,都很小),因此能夠直接使用,並且不一樣的IDE均可以使用同一套頭文件,這樣既節省編譯時間,也節省硬盤空間。
toolset:指定編譯器,可選的如borland、gcc、msvc(VC6)、msvc-7.1(vs2003)、msvc-8.0(vs2005)、msvc-9.0(vs2008)、msvc-10.0(VS20010)、msvc-12.0(VS20013)等。若是不指定,則生成某一個系統默認的編譯器版本。跟從Visual Studio 20** Command Prompt對應的編譯器版本不要緊。
--without-/--with-:選擇不編譯/編譯哪些庫。由於python、mpi等庫我都用不着,因此排除之。另外,wave、graph、math、regex、test、 program_options、serialization、signals這幾個庫編出的靜態lib都很是大,因此不須要的也能夠without掉。這能夠根據各人須要選擇,默認是所有編譯。
--stagedir/--prefix:stage 時使用stagedir,install時使用prefix(--prefix跟--stagedir連用時,只有--prefix起做用),表示編譯生成文件的路徑。推薦給不一樣的IDE指定不一樣的目錄,如VS2010對應的是 E:\SDK\boost_1_46_1\vc10,VC6對應的是E:\SDK\boost_1_45_0\vc6,不然都生成到一個目錄下面,難以管理。若是使用了install參數,那麼還將生成頭文件目錄,vc9若是--prefix=E:\SDK\boost_1_46_1\vc9 對應的就是E:\SDK\boost_1_46_1\vc9 \include\boost-1_66\ (其下有boost目錄),vc6相似(光這路徑都這樣累贅,仍是使用stage好)。
--stagedir=".\bin\vc12_x86" --stagedir=".\bin\vc12_x64" 默認是./stage
--build-dir:編譯生成的中間文件的路徑。這個本人這裏沒用到,默認就在根目錄(E:\SDK\boost_1_46_1)下,目錄名爲bin.v2,等編譯完成後可將這個目錄所有刪除(沒用了),因此不須要去設置。
--build-type:
默認是minimal, on Windows, these are static multithreaded libraries in debug and release modes, using shared runtime; on Linux, these are static and shared multithreaded libraries in release mode.
Complete, build all possible variations.(就是說build全部支持的編譯選項)
--variant:決定編譯什麼版本。variant=debug variant=release
debug/release:?編譯debug/release版本。通常都是程序的debug版本對應庫的debug版本,因此兩個都編譯。若是不指定,則兩種方式都生成;也能夠所有指定如: debug release 注意:linux上只能同時使用一種且不帶--variant=
link:生成動態連接庫/靜態連接庫。生成動態連接庫需使用shared方式,生成靜態連接庫需使用static方式。通常boost庫可能都是以static方式編譯,由於最終發佈程序帶着boost的dll感受會比較累贅。若是不指定,則兩種方式都生成。
runtime-link:動態/靜態連接C/C++運行時庫。一樣有shared和static兩種方式。若是不指定,則兩種方式都生成。通常都是使用shared
這樣runtime-link和link一共能夠產生4種組合方式,各人能夠根據本身的須要選擇編譯。通常link只選static的話,只須要編譯2種組合便可,即link=static runtime-link=shared(推薦)和link=static runtime-link=static。
threading:單/多線程編譯。通常都寫多線程程序,固然要指定threading=multi方式了(默認);若是須要編寫單線程程序,那麼還須要編譯單線程庫,可使用single方式。
--address-model:默認生成32位的平臺庫,加入address-model=64屬性才能生成64位的DLL。
--architecture:architecture=x86 (32位和64位都用這個)
--help:
3. 配置VS2008環境
在菜單欄的「工具」——「選項」——「項目和解決方案」——「VC++目錄」,「平臺」選擇「Win32」。
「顯示如下內容的目錄」選擇「包含文件」,點擊「新建」按鈕,文件夾選擇「E\boost_1_48_0」。
「顯示如下內容的目錄」選擇「庫文件」,點擊「新建」按鈕,文件夾選擇「E:\boost_1_48_0\stage\lib」。
4.編寫代碼測試
注:若是編寫的測試代碼出現相似錯誤」沒法打開包括文件:「boost/regex.hpp」: No such file or directory」 說明附件包含目錄出現錯誤,這時要糾正包含目錄。
若是在下還有incude目錄,咱們只需包含includes目錄就加載了相關頭文件,若是沒有,如上加載總目錄,讓編譯器本身找。
附加:在第2步的時候,若是將執行指令裏面的「stage」改爲」install」,則會生成include指令。
1 #include<iostream> 2 #include <boost/regex.hpp> 3 using namespace std; 4 5 int main() 6 { 7 // 3 digits, a word, any character, 2 digits or "N/A", 8 // a space, then the first word again 9 boost::regex reg("\\d{3}([a-zA-Z]+).(\\d{2}|N/A)\\s\\1"); 10 11 std::string correct="123Hello N/A Hello"; 12 std::string incorrect="123Hello 12 hello"; 13 14 assert(boost::regex_match(correct,reg)==true); 15 assert(boost::regex_match(incorrect,reg)==false); 16 cout<<"Hello Boost !"<<endl; 17 }
參見:https://www.cnblogs.com/zhcncn/p/3950477.html
所獲得的結果以下表所示:
序號 | link | runtime-link | 生成物 | 備註 |
1 | static | static | libboost_date_time-vc120-mt-sgd-1_56.lib libboost_date_time-vc120-mt-s-1_56.lib |
|
2 | static | shared | libboost_date_time-vc120-mt-gd-1_56.lib libboost_date_time-vc120-mt-1_56.lib |
與5結果相同 |
3 | shared | shared | boost_date_time-vc120-mt-gd-1_56.dll boost_date_time-vc120-mt-gd-1_56.lib boost_date_time-vc120-mt-1_56.dll boost_date_time-vc120-mt-1_56.lib |
|
4 | shared | static | 報錯,沒法編譯 | |
5 | 使用缺省 | 使用缺省 | libboost_date_time-vc120-mt-gd-1_56.lib libboost_date_time-vc120-mt-1_56.lib |
與2結果相同 而且在省略debug release時,debug release版本都編譯 |
6 | 使用--build-type=complete | boost_date_time-vc120-mt-gd-1_56.dll boost_date_time-vc120-mt-gd-1_56.lib boost_date_time-vc120-mt-1_56.dll boost_date_time-vc120-mt-1_56.lib
libboost_date_time-vc120-mt-sgd-1_56.lib libboost_date_time-vc120-mt-s-1_56.lib
libboost_date_time-vc120-mt-gd-1_56.lib libboost_date_time-vc120-mt-1_56.lib
libboost_date_time-vc120-s-1_56.lib libboost_date_time-vc120-sgd-1_56.lib |
--build-type=complete時,能夠看到link,runtime-link的 3種組合下debug, release的多線程版本都生成出來了, 除此以外,還生成了link=static,runtime-link=static的debug, release的單線程版本 |
從上面的結果能夠看到,link和runtime-link的缺省配置是 link=static runtime-link=shared,因此咱們可使用 (b2 stage --toolset=msvc-12.0 --with-date_time --stagedir="E:\eCode\boost_1_56_0\bin\vc12_2")命令行來編譯boost。
另外,咱們還能夠分析一下 boost 庫的命名特色:【2】
(1)以「lib」開頭的是「link=static」版本(靜態連接庫版本,沒有dll),而直接以「boost」開頭的是「link=shared」版本(動態連接庫版本,包含lib和dll)。
(2)全部的庫都含有"boost"前綴。
(3)緊隨其後的是boost庫名稱(好比date_time庫)。
(4)而後是編譯器的版本,與庫名稱之間以"-"而不是下劃線"_"分隔(好比 -vc120)。
(5)有「mt」的爲「threading=multi」版本,沒有的則是「threading=single」版本。
(6)有「s」的爲「runtime-link=static」版本,沒有的則是「runtime-link=shared」版本。
(7)有「gd」的爲debug版本,沒有的則是release版本。
(8)全部的庫都含有boost庫的版本號結尾(好比1_56,其中的"."如下劃線"_"代替)
3. link, runtime-link 組合分析
文章【2】給出了link,runtime-link的具體做用分析。
假設一個庫A依賴於庫B,咱們本身的程序client依賴於庫A,即:
那麼,link指的是client->A,runtime-link指的是A -> B
配置 |
連接過程 |
運行時須要的文件 |
link=static runtime-link=static |
client經過A.a (A.lib)靜態包含A; A經過B.a (B.lib)靜態包含B; 不關 .so .dll的事 |
client |
link=static runtime-link=shared |
client經過A.a (A.lib)靜態包含A; 在運行時,client要動態調用B.so (B.dll) |
client B.so (B.dll) |
link=shared runtime-link=shared |
client會包含A.a (A.lib); A會包含 B.a (B.lib); 但都只保存動態庫的真正實現的stub,運行時經過stub去動態加載 A.so (A.dll), B.so (B.dll) 中的實現 |
client A.so (A.dll) B.so (B.dll) |
link=shared runtime-link=static |
client會包含A.a (A.lib),但只包含真正實現的stub; A經過B.a (B.lib)靜態包含B; 運行時,client會動態調用A.so (A.dll) |
client A.so (A.dll)
|
包含頭文件的Include路徑:E:\eCode\boost_1_56_0
包含庫文件的連接路徑:E:\eCode\boost_1_56_0\bin\vc12\lib
(1)能夠設置爲僅用於當前project:
選中當前project->Properties->Configuration Properties->C/C++->General: Additional Include Directories: 設置 E:\eCode\boost_1_56_0
選中當前project->Properties->Configuration Properties->Linker->General: Additional LibraryDirectories: 設置 E:\eCode\boost_1_56_0\bin\vc12\lib
(2)可設置爲僅用於當前Solution:
選中當前project->Properties->Configuration Properties->VC++ Directories:
Include Directories: 設置 E:\eCode\boost_1_56_0
LibraryDirectories: 設置 E:\eCode\boost_1_56_0\bin\vc12\lib
(3)可設置爲OS當前用戶下的VC++環境(當前用戶下VC++所建立的全部Solution)
在某個已打開的工程下,切換到Property Manager 選項卡,而後而後展開當前工程的properties配置,打開Microsoft.Cpp.Win32.User
選擇Common Properties->VC++ Directories:
Include Directories: 設置 E:\eCode\boost_1_56_0
LibraryDirectories: 設置 E:\eCode\boost_1_56_0\bin\vc12\lib
這樣設置的僅在Win32編譯選項下起做用,x64編譯選項須要另外配置x64的properties sheet。
(4)可設置爲OS全部用戶下的VC++環境
能夠編輯 Microsoft.Cpp.Default.props 、Microsoft.Cpp.props 。這裏就不介紹了。
使用文章【3】中date_time計時函數。建立一個Win32 console 工程,而後copy下面代碼
//#define BOOST_DATE_TIME_SOURCE #include <iostream> #include <boost/date_time/gregorian/gregorian.hpp> #include <boost/date_time/posix_time/posix_time.hpp> using namespace std; using namespace boost::gregorian; using namespace boost::posix_time; /************************************************************************ 建立微秒級的計時器 ************************************************************************/ template <class T = microsec_clock> class MyTimer { private: ptime m_startTime; public: MyTimer() { Restart(); } void Restart() { m_startTime = T::local_time(); } void Elapsed() { cout << T::local_time() - m_startTime << endl; } }; int main() { MyTimer<microsec_clock> t; for(int i = 0; i < 100; ++i) { cout << "hello" << endl; } t.Elapsed(); }
注意開頭的宏 「#define BOOST_DATE_TIME_SOURCE」 注掉了。若啓用這個宏定義,則默認由編譯器從新編譯嵌入的頭文件;若不啓用這個宏定義,則表示使用系統已編譯好的date_time庫。
(1)禁用#define BOOST_DATE_TIME_SOURCE 宏,而後將 libboost_date_time-vc120-mt-gd-1_56.lib 從 E:\eCode\boost_1_56_0\bin\vc12\lib 中移除,編譯debug版的程序時,提示鏈接錯誤,缺乏libboost_date_time-vc120-mt-gd-1_56.lib。
(2)啓用#define BOOST_DATE_TIME_SOURCE 宏,編譯debug版的程序時,可發現即便在缺乏 libboost_date_time-vc120-mt-gd-1_56.lib的狀況下,也能成功編譯。
【1】Boost下載安裝編譯配置使用指南(含Windows、Linux以及ARM Linux)(http://www.cnblogs.com/wondering/archive/2009/05/21/boost_setup.html)
【2】link 和 runtime-link,搭配shared 和 static(http://blog.csdn.net/yasi_xi/article/details/8660549)
【3】計時函數(二)(http://www.cnblogs.com/jerry19880126/archive/2013/02/20/2919718.html)
【4】官方文檔Getting Started on Windows(http://www.boost.org/doc/libs/1_56_0/more/getting_started/windows.html)
【5】bjam使用(http://blog.chinaunix.net/uid-22301538-id-3158997.html)
1. x64環境下編譯得先從開始菜單啓動Visual Studio的Visual Studio 2010 x64 Win64 Command Prompt進入命令提示符(也能用於build VS20十、VS2015的boost庫。x64兼容(Visual Studio 2010 x64 cross Command Prompt)能夠在32位系統上編譯出在64位系統上運行的程序,而x64(Visual Studio 2010 x64 Win64 Command Prompt)本機是指在64位系統上編譯出在64位系統上運行的程序。也就是說x64兼容在通常狀況下使用都沒有錯,無論你的系統是32位仍是64位。),而不是隨便打開任意一個命令行窗口就行。
2. 而後轉到boost根文件夾,運行bootstrap.bat生成x64版的b2。
3. 而後運行命令:
在boost_1_66_0中
b2 stage --build-type=complete --stagedir=".\lib" --toolset=msvc-10.0 這個用於VS2010
b2 stage --build-type=complete --stagedir=".\lib" --toolset=msvc-14.0 這個用於VS2015 強烈推薦! 全部版本的庫文件,都會生成在.\lib\下,都不衝突
若是編譯過程當中,出現boost\move\detail\type_traits.hpp中decltype不認識的,在項目的預約義中加入BOOST_NO_CXX11_DECLTYPE (我在VS2010上的x64位上成功了) 參見:config\compiler\visualc.hpp 或 linux上參見config\compiler\gcc.hpp
在boost_1_48_0中(發現只能生成32位的)
b2 stage --build-type=complete --stagedir=".\" --toolset=msvc-10.0 --address-model=64 這個用於VS2010 強烈推薦! 全部版本的庫文件,都會生成在.\lib\下,都不衝突
把bin.v2刪除 沒有這步,則下面這步仍是直接拷貝上一步的內容
b2 stage --build-type=complete --stagedir=".\" --toolset=msvc-10.0 --address-model=32 這個用於VS2010 強烈推薦! 全部版本的庫文件,都會生成在.\lib\下,都不衝突
b2 stage --build-type=complete --stagedir=".\" --toolset=msvc-14.0 --address-model=64 這個用於VS2015
把bin.v2刪除 沒有這步,則下面這步仍是直接拷貝上一步的內容
b2 stage --build-type=complete --stagedir=".\" --toolset=msvc-14.0 --address-model=32 這個用於VS2015
4. 而後拷貝頭文件目錄D:\boost_1_66_0\boost\到目的地目錄的header\下,固然也能夠放在原地(即不用執行這不)
這裏以 filesystem庫爲例,以下是它在暫存文件裏的層次結構:
/debug
boost_filesystem-mgw45-d-1_40.lib
boost_filesystem-mgw45-d-1_40.dll/debug/link-static
libboost_filesystem-mgw45-d-1_40.lib/debug/link-static/runtime-link-static
libboost_filesystem-mgw45-sd-1_40.lib/debug/link-static/runtime-link-static/threading-multi
libboost_filesystem-mgw45-mt-sd-1_40.lib/debug/link-static/threading-multi
libboost_filesystem-mgw45-mt-d-1_40.lib/debug/threading-multi
boost_filesystem-mgw45-mt-d-1_40.lib
boost_filesystem-mgw45-mt-d-1_40.dll/release
boost_filesystem-mgw45-1_40.dll
boost_filesystem-mgw45-1_40.lib/release/link-static
libboost_filesystem-mgw45-1_40.lib/release/link-static/runtime-link-static
libboost_filesystem-mgw45-s-1_40.lib/release/link-static/runtime-link-static/threading-multi
libboost_filesystem-mgw45-mt-s-1_40.lib/release/link-static/threading-multi
libboost_filesystem-mgw45-mt-1_40.lib/release/threading-multi
boost_filesystem-mgw45-mt-1_40.dll
boost_filesystem-mgw45-mt-1_40.lib
由以上的文件夾層次結構基本就能夠得出結論:
1、以「lib」開頭的是「link-static」版本的,而直接以「boost」開頭的是「link-shared」版本的。
2、有「d」的爲debug版本,沒有的則是release版本。
3、有「s」的爲「runtime-link-static」版本(使用靜態CRT),沒有的則是「runtime-link-shared」版本(使用動態CRT)。
4、有「mt」的爲「threading-multi」版本,沒有的則是「threading-single」版本。
(1)以「lib」開頭的是「link=static」版本(靜態連接庫版本,沒有dll),而直接以「boost」開頭的是「link=shared」版本(動態連接庫版本,包含lib和dll)。
(2)全部的庫都含有"boost"前綴。
(3)緊隨其後的是boost庫名稱(好比date_time庫)。
(4)而後是編譯器的版本,與庫名稱之間以"-"而不是下劃線"_"分隔(好比 -vc120)。
(5)有「mt」的爲「threading=multi」版本,沒有的則是「threading=single」版本。
(6)有「s」的爲「runtime-link=static」版本,沒有的則是「runtime-link=shared」版本。
(7)有「gd」的爲debug版本,沒有的則是release版本。
(8)全部的庫都含有boost庫的版本號結尾(好比1_56,其中的"."如下劃線"_"代替)
來源:http://china.ygw.blog.163.com/blog/static/68719746201152485054104/
最新的boost庫已經發布了1.46.1版本,可是我接觸的比較晚,去年纔開始接觸並使用,第一次使用的是1.43版本,並且當時安裝的時候沒有進行徹底安裝(未包含mpi及python,只涉及32位版本)。這幾天從新研究了一下完整安裝問題,如下針對Windows 7系統(64位)下經過vs2010完整安裝boost 1.46.1(32位/64位)進行詳細描述。
完整安裝boost,須要涉及幾個第三方庫:
1)Regex所須要的Unicode支持類庫---ICU。因爲本身是使用C/C++,因此須要icu4c。
2)MPI所須要的類庫---Boost的官方站點說須要MPICH或OpenMPI之類的支持,事實上在Windows下老是會提示須要MPIC++,你須要的是Microsoft Cluster Pack SDK,下載並默認安裝在C:\ProgramFiles\Microsoft Compute Cluster Pack下。(說明:若是安裝Microsoft HPC Pack 2008 SDK或Microsoft Compute Cluster Pack時不是裝到默認的路徑下,那bjam就會找不到mpic++的路徑,這時候能夠修改一下mpi.jam(在boost_1_46_1\tools\build\v2\tools目錄中): local cluster_pack_path_native = "你的路徑")。
3)Python所須要的Python語言庫---Python。
可是須要注意,若是選擇編譯python的話,是須要python語言支持的,應該到python官方主頁http://www.python.org/下載安裝(因此通常也without)。若是要生成Boost.Python庫,須要先下載安裝x64版的Python安裝包,我用的版本是3.2.3。在使用這個庫編寫Python擴展DLL時,默認是使用動態庫版的Boost.Python,要使用靜態版的必須在C++項目中定義BOOST_PYTHON_STATIC_LIB宏,這樣就不用在使用或發佈擴展時帶着boost_python-vc90-mt-1_50.dll一塊兒了,固然擴展DLL的尺寸會大些,若是作實驗不必這樣,編譯又慢生成的文件也大。
如下先分步描述相關第三庫的安裝過程:
1)ICU4C
a)當前icu4c最高版本爲4.8,下載的源代碼包爲icu4c-4_8-src.tgz(我的偏向於經過源代碼編譯生成,這樣會更靈活,好比有問題時能夠調試);
b)解壓icu4c-4_8-src.tgz文件,進入icu\source\allinone子目錄,用vs2010打開allinone.sln解決方案;
c)分別按照Win32(32位程序)/x64(64位程序)下的Debug/Release模式進行編譯,其Win32的Debug/Release庫文件保存於icu\lib目錄,x64的Debug/Release庫文件保存於icu\lib64目錄。須要注意的是:生成相應的Debug/Release庫文件後,須要將相應的lib/lib64目錄下.dll及.lib文件備份出來,避免編譯下一Release/Debug版本時被覆蓋;
d)將編譯後的Win32/x64的Debug/Release文件(.lib及.dll文件)依次保存好(好比x86/x64目錄下的debug/release子目錄),並在x86/x64目錄下的debug/release子目錄下新建include目錄,並將icu4c的頭文件依次拷貝一份到對應的include目錄中(後面編譯boost時須要)。
2)MPI
最最簡單的方式,直接進入前述地址下載安裝便可。
3)Python
當前Python最高版本爲3.2,從3.2版本開始有了Windows的安裝包(安裝後直接有了相應的頭文件、庫文件等,無需經由代碼編譯)。在這裏要說聲抱歉,直接經由代碼編譯有不少問題,老是編譯不過,因此暫時使用安裝包,待後面代碼編譯經過後再使用代碼包。(注意,編譯32位boost程序時安裝32位的python,編譯完成後再卸載,而後再安裝64位的python,繼續進行64位boost的編譯,反之亦然)
至此,安裝boost所須要的相關第三方庫已經準備完成,如今正式開始boost 1.46.1的安裝過程:
1)經過boost網站下載最新的boost源代碼包boost_1_46_1.tar.gz並解壓;
2)用UltraEdit打開boost_1_46_1\boost_1_46_1\tools\build\v2目錄下的user-config.jam文件,並在最後增長兩行「using mpi ;」(注意,mpi與;之間有一個空格)、「using python : 3.2 : c:\\python32 ;」(注意,3.2與;之間有一個空格,另外,3.2爲python的版本號(只須要主版本號與次版本號),c:\\python32爲python的安裝目錄,windows下須要將路徑的\符號轉換爲\\)
3)經過vs2010的「Visual Studio Command Prompt (2010)」(編譯32位)、「Visual Studio X64 Win64 Command Prompt (2010)」(編譯64位)菜單項進入vs2010命令行,並進入解壓後的boost_1_46_1\boost_1_46_1目錄;
4)執行bootstrap.bat命令(只須要執行一次便可);
5)x86/x64下的debug/release編譯命令分別是:
a)x86 debug
bjam install --prefix=e:\build\boost\1.46.1\x86\debug toolset=msvc-10.0 variant=debug link=shared address-model=32 threading=multi runtime-link=shared -s ICU_PATH=E:\build\icu4c\4.8\x86\debug
b)x86 release
bjam install --prefix=e:\build\boost\1.46.1\x86\release toolset=msvc-10.0 variant=release link=shared address-model=32 threading=multi runtime-link=shared -sICU_PATH=E:\build\icu4c\4.8\x86\release
c)x64 debug
bjam install --prefix=e:\build\boost\1.46.1\x64\debug toolset=msvc-10.0 variant=debug link=shared address-model=64 threading=multi runtime-link=shared -sICU_PATH=E:\build\icu4c\4.8\x64\debug
d)x64 release
bjam install --prefix=e:\build\boost\1.46.1\x64\release toolset=msvc-10.0 variant=release link=shared address-model=64 threading=multi runtime-link=shared -sICU_PATH=E:\build\icu4c\4.8\x64\release
6)其中,--prefix設置boost安裝目錄;stage表示只生成庫文件(dll與lib文件);toolset指定編譯器,vs2010就是msvc-10.0,vs2005/vs2008分別是msvc-8.0與msvc-9.0;variant決定編譯什麼版本;link決定使用靜態庫仍是動態庫,shared是動態庫,static是靜態庫;address-model決定地址長度,即32仍是64位程序;threading決定使用單線程(single)仍是多線程(multi)庫;runtime-link決定是靜態(static)仍是動態(shared)連接C/C++標準庫;-s ICU_PATH設置icu4c的路徑;install會生成包含頭文件的include目錄。
至此,windows 7(64位)系統下使用vs2010徹底編譯boost 1.46.1完成(含x86/x64的debug與release版本)。