Boost學習總結(一)VS2010環境下編譯STLport和Boosthtml
Boost庫是一個功能強大、構造精巧、跨平臺、開源而且徹底免費的C++程序庫。1998年,Beman G.Dawes(C++標準委員會成員之一)發起倡議並創建了Boost社區,目的是向C++程序員提供免費的、同行審查、可移植的高質量C++源程序庫。Boost涵蓋了字符串與文本處理、容器、迭代器、算法、圖像處理、模板元編程、併發編程等等,使用Boost,將大大加強了C++的功能和表現力。python
STLport是一個徹底符合C++98標準的一個免費的C++標準庫實現。STLport具備不少其餘STL實現所沒有的優勢。首先是高度的可移植性,能夠配合市面上幾乎全部的操做系統和編譯器使用,使開發的程序可以在不一樣的編譯平臺上得到一致的標準庫實現。其次是性能表現優秀。第三個優勢是在標準以外增長了若干有用的擴展,如rope(加強的字符串類)、slist(單鏈表數據結構)、hash_map(散列映射容器)以及支持線程安全。ios
接下來,咱們就將STLport和Boost安裝並學習使用這兩個庫。程序員
首先第一步,咱們下載安裝visual studio 2010。下載戳這裏:visual studio 2010算法
安裝步驟以下:編程
首先解壓壓縮包,須要幾分鐘的時間,而後雙擊setup.exe.安全
最後的安裝得須要三十分鐘左右,安裝完成以後還會彈出一兩個窗口,就不須要管了,直接各類取消之。數據結構
下載STLport地址在這裏:http://sourceforge.net/projects/stlport/多線程
我選擇的是STLport-5.2.1版本,下載的是壓縮包STLport-5.2.1.tar.bz2。和Boost同樣,咱們須要對其解壓、編譯以後才能使用這個庫。併發
在【開始】菜單裏打開vistual studio 2010下子文件vistual studio tools文件裏的vistual studio命令提示(2010)。
第一步:執行E:\C++\STLport-5.2.1(這裏我是以個人安裝路徑爲準),進入了STLport目錄;
第二步:configure msvc9(雖然咱們安裝的10版本,好像msvc10不行),配置編譯環境;
第三步:執行cd build\lib;
第四步:執行命令nmake -f msvc.mak clearn install。
等待數分鐘以後就能夠了,這裏由於我以前安裝的時候忘記截圖了,因此就沒有辦法給出圖片顯示,若是編譯不成功的話,能夠按照下面的方法改之。(這是我在網上找到的解決方法)
目前爲止,應該把STLport編譯成功了吧,呆會兒等編譯Boost完成以後,一塊兒來對這兩個庫進行測試。
下載Boost的官方網址:www.boost.org。可是打開速度太慢了,索性就在網上找到了壓縮包boost_1_56_0.7z,而後解壓就能夠了。
雙擊以後,咱們會獲得四個文件,其中有兩個文件就是上圖中所看到的b2.exe和bjam.exe。
注意:接下來的編譯須要一個小時左右的時間,這是一個很蛋疼的事情。
而後打開VS的命令提示窗口,運行bjam stage --without-python --toolset=msvc-10.0 --build-type=complete --stagedir="E:\C++\boost_1_56_0\bin\vc10" link=static runtime-link=shared threading=multi debug release
stage:表示只生成庫(dll和lib),用install的話還會生成包含頭文件的include目錄。
toolset:指定編譯器,VS2010用msvc-10.0。
without/with:表示不編譯/編譯哪些庫。
stagedir:當使用stage時用stagedir,使用install用prefix,表示編譯生成文件的路徑。路徑的命名最好和編譯器相關,編譯管理。
link:指定生成動態連接庫或靜態連接庫。生成動態連接庫需使用shared方式,生成靜態連接庫需使用static方式。
runtime-link:動態/靜態連接C/C++運行時庫。有shared和static兩種方式,這樣runtime-link和link一共能夠產生4種組合方式。
threading:單/多線程編譯。
debug/release:編譯debug/release版本。通常都是程序的debug版本對應庫的debug版本,因此兩個都編譯。
咱們運用VS10新建一個工程以後,右擊工程名,選擇屬性,在VC目錄裏咱們把Boost和STLport加入到這個工程裏面去。
包含目錄:E:\C++\boost_1_56_0;$(IncludePath);E:\C++\STLport-5.2.1\stlport;$(IncludePath)
庫目錄:E:\C++\boost_1_56_0\bin\vc10\lib;$(LibraryPath);E:\C++\STLport-5.2.1\lib;$(LibraryPath);
這個根據本身的路徑改一下就能夠了,緊接着編寫代碼測試。
1 #include<iostream> 2 #include<boost/thread.hpp> 3 using namespace std; 4 5 void threadFunc() { 6 cout<<"This is a Thread function."<<endl; 7 } 8 9 int main() { 10 boost::function<void()> func(threadFunc); 11 boost::thread t(func); 12 t.join(); 13 return 0; 14 }
1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<cmath> 6 #include<algorithm> 7 #include<rope> 8 #define inf 0x7fffffff 9 using namespace std; 10 11 int main() { 12 // crope是用來存儲char字符的容器 13 crope crope1("Hello,"); 14 crope crope2("STLport!"); 15 cout<<crope1+crope2<<endl; 16 cout<<"BaiYiShaoNian"<<endl; 17 return 0; 18 }