Boost學習總結(一)VS2010環境下編譯STLport和Boost
Boost庫是一個功能強大、構造精巧、跨平台、開源並且完全免費的C++程序庫。1998年,Beman G.Dawes(C++標准委員會成員之一)發起倡議並建立了Boost社區,目的是向C++程序員提供免費的、同行審查、可移植的高質量C++源程序庫。Boost涵蓋了字符串與文本處理、容器、迭代器、算法、圖像處理、模板元編程、並發編程等等,使用Boost,將大大增強了C++的功能和表現力。
STLport是一個完全符合C++98標准的一個免費的C++標准庫實現。STLport具有很多其他STL實現所沒有的優點。首先是高度的可移植性,可以配合市面上幾乎所有的操作系統和編譯器使用,使開發的程序能夠在不同的編譯平台上獲得一致的標准庫實現。其次是性能表現優秀。第三個優點是在標准之外增加了若干有用的擴展,如rope(增強的字符串類)、slist(單鏈表數據結構)、hash_map(散列映射容器)以及支持線程安全。
接下來,我們就將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 }