日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

boost——入门指南

發布時間:2024/3/26 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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庫都適合最終的標準。有10boost庫已經被包含在C++標準委員會的庫技術報告(TR1)和新的C++11標準中。除了從TR1獲得的幾個庫外,C++標準還包含了幾個額外boost庫。更多的boost庫將可能被用于C++17標準中。

?

boost庫的使用

以下講述的是windows平臺下的使用,開發的IDEVS2010

boost庫的下載

你可以到其官網http://www.boost.org上去查找最新版本的boost,進行下載。也可以到這個鏈接直接下載1.57.0的boosthttp://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?是老版本,b2bjam的升級版本。

?

輸入第二個命令(.\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.liblibboost_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???????????toolsetC++編譯器的集合,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——入门指南的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。