boost——入门指南
什么是boost
boost庫是一個開源免費的第三方庫,它是一個非常優秀的庫,是C++標準的最好實踐之一,因此也經常被用于商業的開發。所以,如果你是搞C++的,還沒有聽過或用過boost,你就out了,想想自己是不是跟不上技術的步伐了,哈哈……
關于boost的地位,大家可以看看其官方文檔:
We?aim?to?establish?"existing?practice"?and?provide?reference?implementations?so?that?Boost?libraries?are?suitable?for?eventual?standardization.?Ten?Boost?libraries?are?included?in?the?C++?Standards?Committee's?Library?Technical?Report?(TR1)?and?in?the?new?C++11?Standard.?C++11?also?includes?several?more?Boost?libraries?in?addition?to?those?from?TR1.?More?Boost?libraries?are?proposed?for?standardization?in?C++17.
我們致力于建立(C++標準的)“現有實踐”和參考實現,因此boost庫都適合最終的標準。有10個boost庫已經被包含在C++標準委員會的庫技術報告(TR1)和新的C++11標準中。除了從TR1獲得的幾個庫外,C++標準還包含了幾個額外boost庫。更多的boost庫將可能被用于C++17標準中。
?
boost庫的使用
以下講述的是windows平臺下的使用,開發的IDE是VS2010。
boost庫的下載
你可以到其官網http://www.boost.org上去查找最新版本的boost,進行下載。也可以到這個鏈接直接下載1.57.0的boost:http://www.boost.org/users/history/version_1_57_0.html。
boost的目錄結構
boost_1_57_0\?............................................Boost的根目錄
???index.htm?..............................................www.boost.org中指導手冊的一個副本
???boost\?.....................................................所有Boost的頭文件
???lib\?...........................................................預編譯的二進制庫
???libs\?.........................................................Tests,?.cpps,?docs,?etc.,?by?library
?????index.html?........................................Boost庫的使用手冊的首頁
?????algorithm\
?????any\
?????array\
?????????????????????…更多的庫…
???status\?..................................................Boost-wide?測試包
???tools\?....................................................常用工具,如.?Boost.Build,?快速查詢手冊,?bcp
???more\?...................................................法律條款等
???doc\?.......................................................Boost庫文檔的一個子集
?
在項目中引入boost
1.你只需要將下載的boost壓縮包解壓即可,不需要任何安裝。假設你的boost庫是解壓在E:\C++Workspace\boost_1_57_0目錄下。
2.在VS2010下創建一個空的工程(我創建的是一個Win32?Console?Application工程,假設工程名為BoostTest)。
3.右鍵點擊你的工程名,選擇Properties(屬性),在彈出的對話框中選擇?Configuration?Properties?>?C/C++?>?General?,在?Additional?Include?Directories中輸入第1步解壓的boost的根目錄路徑(如E:\C++Workspace\boost_1_57_0)
4.將BoostTest.cpp中的內容替換成以下的測試代碼:
#include "stdafx.h"#include <boost/lambda/lambda.hpp> #include <iostream> #include <iterator> #include <algorithm>int main() {using namespace boost::lambda;typedef std::istream_iterator<int> in;std::for_each(in(std::cin), in(), std::cout << (_1 * 3) << " " ); }
?
4.編譯你的工程BoostTest,編譯成功后運行(F5)。在彈出的控制臺對話框中輸入2?4?6后按Enter,將輸出6?8?12的結果,說明測試成功,boost可以正常使用了。按Ctrl+C結束輸入。
編譯二進制的boost庫
如果你想要使用任何單獨編譯的?Boost?庫,你需要獲得二進制的庫文件。用Visual?C++從源代碼中編譯二進制庫的過程如下:
打開VS2010的命令提示符控制臺:Windows開始菜單\Microsoft?Visual?Studio?2010\Visual?Studio?Tools\Visual?Studio?2005?Command?Prompt,用cd命令將當前目錄定位到Boost的根目錄(E:\C++Workspace\boost_1_57_0),輸入如下兩個命令:
編譯命令一:
bootstrap .\b2 |
?
第一個命令(bootstrap)會執行bootstrap.bat腳本,是用于準備需要使用的Boost.Build程序;第二個命令(.\b2)是調用Boost.Build程序構建獨立編譯的Boost庫。
?
輸入第一個命令(bootstrap)后需要等待一小段時間,當出現以下提示時,說明命令執行完畢。
?
這時Boost根目錄會多出四個文件:
b2.exe:???????????Boost.Build程序,用于編譯二進制的Boost庫
bjam.exe?:????????Boost.Build程序,用于編譯二進制的Boost庫
bootstrap.log?:????執行以上兩個命令時記錄的日志
project-config.jam:?Boost.Build的配制參數
b2.exe?、bjam.exe?這兩個exe作用是一樣的,bjam.exe?是老版本,b2是bjam的升級版本。
?
輸入第二個命令(.\b2)后進行編譯,整個編譯的過程會非常長,可能需要一個小時左右,請耐心等待。編譯成功后會有如下提示:
?
這時你的Boost根目錄下會多出個lib文件夾(筆者的是在.\stage\lib,可能每一臺電腦或平臺下不一樣,請以命令行最后的提示為準,如上圖),這就是編譯出來的Boost的靜態庫和動態庫。
?
編譯命令二:
bootstrap b2?--build-dir=.\lib?toolset=msvc-10.0?--build-type=complete?stage |
?
我用編譯命令一編譯后,進行鏈接測試時,報以下錯誤:
error?LNK2038:?mismatch?detected?for?'_MSC_VER':?value?'1800'?doesn't?match?value?'1600'?in?BoostTest.obj
error?LNK2038:?mismatch?detected?for?'_MSC_VER':?value?'1800'?doesn't?match?value?'1600'?in?BoostTest.obj
error?LNK2038:?mismatch?detected?for?'_MSC_VER':?value?'1800'?doesn't?match?value?'1600'?in?BoostTest.obj
error?LNK2038:?mismatch?detected?for?'_MSC_VER':?value?'1800'?doesn't?match?value?'1600'?in?BoostTest.obj
error?LNK2038:?mismatch?detected?for?'_MSC_VER':?value?'1800'?doesn't?match?value?'1600'?in?BoostTest.obj
error?LNK2038:?mismatch?detected?for?'_MSC_VER':?value?'1800'?doesn't?match?value?'1600'?in?BoostTest.obj
error?LNK1104:?cannot?open?file?'libboost_regex-vc100-mt-gd-1_57.lib'
?
但我在\stage\lib目錄下只找到相應的libboost_regex-vc120-mt-1_57.lib和libboost_regex-vc120-mt-gd-1_57.lib。
上網查了資料說是編譯出來的Boost庫是VC++11的,需要在VS2012上才能支持,VS2010不支持。因此需要重新設置選項,指定編譯器的版本。
上面的命令,第一個命令(bootstrap)與編譯命令一中含意相同,第二個命令b2?--build-dir=.\lib?toolset=msvc-10.0?--build-type=complete?stage的含意如下:
--build-dir?????????????????編譯Boost庫時的工作目錄,用于存放中間文件
toolset=msvc-10.0???????????toolset是C++編譯器的集合,msvc-10.0表示微軟VC++10.0編譯器,VS2010支持。
--build-type=complete?stage????“--build-type=complete”?導致Boost.Build?會編譯出所有支持類型的Boost庫
?
?
?
驗證Boost庫
為了驗證上面編譯出來的靜態庫,我們可以用以下一個簡單的“主題提取”的程序來進行測試。
?
1.在“在項目中引入boost”中已經創建了一個BoostTest工程,右鍵點擊你的工程名,選擇Properties(屬性),在彈出的對話框中選擇?Configuration?Properties?>?Linker?>?General?,在?Additional?Library?Directories中輸入上面編譯出來靜態庫的路徑(如E:\C++Workspace\boost_1_57_0\stage\lib)
2.將BoostTest.cpp中的內容替換成以下代碼
#include "stdafx.h"#include <boost/regex.hpp> #include <iostream> #include <string>int main() {std::string line;boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );while (std::cin){std::getline(std::cin, line);boost::smatch matches;if (boost::regex_match(line, matches, pat))std::cout << matches[2] << std::endl;} }?
3.Build你的工程
4.在你工程編譯出的Debug目錄下會有一個可執行程序BoostTest.exe,在該目錄下創建一個subject.txt文件,并將以下內容保存至subject.txt文件中。
To:?George?Shmidlap From:?Rita?Marlowe Subject:?Will?Success?Spoil?Rock?Hunter? --- See?subject. |
?
5.打開命令提示符,將當前目錄定位到Debug目錄下(如E:\C++Workspace\VS2010\BoostTest\
Debug),輸入:BoostTest.exe?<?subject.txt。將會獲取該文本的主題Will?Success?Spoil?Rock?Hunter?如果出現如下結果,說明驗證成功。
?
?
可參考閱讀:
http://www.boost.org/doc/libs/1_57_0/more/getting_started/windows.html#get-boost
http://www.cnblogs.com/zhcncn/p/3950477.html
?
?
如果您有什么疑惑和想法,請在評論處給予反饋,您的反饋就是最好的測評師!由于本人技術和能力有限,如果本博文有錯誤或不足之處,敬請諒解并給出您寶貴的建議!
?
?
?
總結
以上是生活随笔為你收集整理的boost——入门指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ActiViz学习点滴(七)——坐标轴显
- 下一篇: 斜滑块斜导柱计算公式_斜导柱长度计算