日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Boost 安裝指南

 @IT小小鳥(niǎo)@ 2012-03-15

隨著技術(shù)的進(jìn)步,人們對(duì)軟件項(xiàng)目的要求日益提高。Boost庫(kù)作為一個(gè)優(yōu)秀的C++類庫(kù),通過(guò)幾年的發(fā)展已經(jīng)得到了廣大技術(shù)人員的認(rèn)可。本文將幫助剛剛接觸Boost的用戶來(lái)安裝并配置Boost,并通過(guò)幾個(gè)HelloWorld小程序,來(lái)驗(yàn)證安裝的正確性。并且我也希望能通過(guò)這幾個(gè)小程序使讀者能對(duì)Boost有一個(gè)初步的認(rèn)識(shí),并盡快加入Boost的用戶行列。在寫(xiě)本文的時(shí)候,我所使用的環(huán)境是Windows XP Home Edition + Boost1.33.1 + Visual Studio .NET 2003

  首先是從Boost的主頁(yè)上下載相關(guān)的Boost的壓縮包,我下載的是boost_1_33_1.zip,假定我們解壓到D盤(pán)根目錄。解壓后的目錄結(jié)構(gòu)應(yīng)該類似
boost_1_33_1<目錄>
  -- boost <目錄>
  -- doc <目錄>
  -- libs <目錄>
  -- more <目錄>
等等這些目錄和文件。

  打開(kāi)Visual Studio .NET 2003 選擇菜單 工具-->選項(xiàng)-->項(xiàng)目-->VC++目錄,在“包含文件目錄”里,增加一行,如:D:\boost_1_33_1。這樣你就可以使用大多數(shù)的Boost類庫(kù)?,F(xiàn)在我們來(lái)寫(xiě)一個(gè)小程序,感受一下Boost

#include <vector>
#include <iostream>
#include <boost/lexical_cast.hpp>

using namespace boost ;
using namespace std ;

int main(int argc, char * argv[])
{
  vector<int> v1;
  vector<int>::const_iterator ci_v1 ;
  int iLength = 0 ;

  while( iLength < 10 )
  {
    try
    {
      if ( iLength == 5 )
        v1.push_back(lexical_cast<int>("DukeJoe")) ;
      else
        v1.push_back(lexical_cast<int>(iLength));
      }
      catch(bad_lexical_cast &ex)
      {
        cout << ex.what()<< endl ;
        v1.push_back(-1);
      }
      iLength++ ;
    }

    cout << "vector --> " ;
    for ( ci_v1 = v1.begin() ; ci_v1 != v1.end() ; ci_v1++ )
    {
      cout << *ci_v1 << " " ;
    }
    cout << endl ;

    return 0 ;
}

這個(gè)程序的功能是向vector里壓入int,如果壓入的不是int,而程序應(yīng)該可以拋出異常,主程序通過(guò)捕獲異常來(lái)確定程序的運(yùn)行錯(cuò)誤。程序本應(yīng)該在vector里存入0到9的10個(gè)數(shù),但我們強(qiáng)行在iLength等于5時(shí),壓入一個(gè)錯(cuò)誤類型的值DukeJoe,這時(shí)程序應(yīng)拋出異常,而catch捕獲異常bad_lexical_cast,將-1壓入vector,所以我們得到的這10個(gè)數(shù)中的第5個(gè)數(shù),實(shí)際沒(méi)有壓入,而這個(gè)位置上我們看到的是在異常處理過(guò)程中壓入的-1。lexical_cast的作用是進(jìn)行簡(jiǎn)單的類型轉(zhuǎn)換,如果轉(zhuǎn)換不成功,則它會(huì)拋出一個(gè)異常bad_lexical_cast。關(guān)于lexical_cast的詳細(xì)說(shuō)明可以看一下Boost關(guān)于lexical_cast的文檔。

  直接在VS2003里的包含目錄加入boost的目錄后,絕大多數(shù)的類庫(kù)就可以使用了,但還有少數(shù)的類庫(kù)需要額外再生成對(duì)應(yīng)操作系統(tǒng)的動(dòng)態(tài)庫(kù),才可以使用。我們以Windows+VS2003為環(huán)境,以regex類庫(kù)舉例說(shuō)明。regex為我們提供了正則表達(dá)式功能,其中boost的regex支持perl語(yǔ)法,更極大的提升了我們使用正則表達(dá)式所產(chǎn)生的效果。但要想使用regex,我們需要生成相關(guān)的lib文件才可以。生成的步驟如下:開(kāi)始 --> Microsoft Visual Studio.NET 2003 --> Visual Studio.NET 工具 --> Visual Studio.NET 2003 命令提示。使用這個(gè)命令提示符之后,VS就會(huì)為我們自動(dòng)配置好VC環(huán)境。打開(kāi)命令提示符之后,我們進(jìn)入目錄 D:\boost_1_33_1\libs\regex\build ,現(xiàn)在我們敲入 nmake /fvc71.mak 生成lib文件。生成lib文件之后,我們單獨(dú)建一個(gè)文件夾,例如我建立的是d:\boost_libs,然后把所有的*.lib文件拷貝到這個(gè)目錄。然后我們打開(kāi)VS2003,選擇菜單 工具-->選項(xiàng)-->項(xiàng)目-->VC++目錄,在“庫(kù)文件”里加入目錄d:\boost_libs,這樣VS2003在鏈接時(shí),就會(huì)搜索這個(gè)目錄

下面我們來(lái)看一個(gè)小程序,測(cè)試一下正則表達(dá)式功能

#include <iostream>
#include <string>
#include <iterator>
#include <boost/regex.hpp>

using namespace boost ;
using namespace std ;

int main(int argc, const char** argv)
{
  wchar_t * strSample = L"[哈爾濱]高宏偉 2007-05-15 呵呵 Blog:http://dukejoe.yeah.net " ;
  wregex rgExpression(L"(\\[(\\S*)\\])((\\S|\\s)*)(\\d{4,}-\\d{2,}-\\d{2,})((\\S|\\s)*)", boost::regex::perl) ;
  wcmatch what ;

  wcout.imbue(locale("chs"));
  try
  {
    if(regex_match(strSample, what, rgExpression))
    {
      wcout << L"match!" << endl ;
      for (unsigned int i = 0 ; i < what.size() - 1 ; i++ )
      {
        wcout << L"what[" << i << L"] --> " << what[i] << endl ;
      }
    }
    else
      wcout << L"not match!" << endl ;
  }
  catch(...)
  {
    return -1;
  }
    return 0;
}

這個(gè)程序我們使用的是寬字符,主要是因?yàn)槲覀円ヅ錆h字。程序中的strSample是一個(gè)樣本,我們使用的正規(guī)表達(dá)式是rgExpression,構(gòu)造函數(shù)的boost::regex::perl說(shuō)明我們使用perl語(yǔ)法規(guī)則。正規(guī)表達(dá)式為我們先匹配[]中間的城市名稱,然后還為我們匹配了一個(gè)帶年月日的時(shí)間格式,所以在這個(gè)程序中對(duì)我們有用的是what[2]和what[5],分別匹配出用戶的所在地(哈爾濱)和用戶的時(shí)間(2007-05-15)。由于C語(yǔ)言的語(yǔ)法規(guī)定反斜杠為轉(zhuǎn)義字符,所以在我們構(gòu)造正規(guī)表達(dá)式時(shí),我們要用兩個(gè)反斜杠。regex_match用來(lái)進(jìn)行實(shí)際的匹配工作。關(guān)于boost的正則表達(dá)式的用法,已經(jīng)超出了本文的范圍,本文將精力主要集中在使用這個(gè)程序驗(yàn)證boost安裝過(guò)程上。以后有機(jī)會(huì),我盡量在Blog上再寫(xiě)幾篇專門(mén)介紹Boost Regex 正規(guī)表達(dá)式使用的文篇。如果大家編譯上面的程序,在鏈接時(shí)沒(méi)有報(bào)錯(cuò),就是正確鏈接了lib庫(kù)文件。通過(guò)程序的輸出結(jié)果,說(shuō)明程序運(yùn)行正常,我們的庫(kù)也就是安裝正確了。

  下面我們使用Boost.Jam來(lái)Build所有的庫(kù)。首先,我們?cè)俅未蜷_(kāi)VC.NET 2003的命令提示符,然后進(jìn)入D:\boost_1_33_1\tools\build\jam_src目錄,運(yùn)行build.bat。這時(shí)我們會(huì)生成bjam的可執(zhí)行程序。在本文中,Build過(guò)程會(huì)在jam_src下生成bin.ntx86這個(gè)子目錄。現(xiàn)在我們來(lái)配置一下環(huán)境變量PATH,以便用bjam來(lái)build boost。配置步驟如下:右鍵我的電腦-->屬性-->高級(jí)-->環(huán)境變量,在PATH這個(gè)變量后面加入bin.ntx86所在的絕對(duì)路徑。例如我的PATH是:C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin\.;C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin\WinNT\.;D:\boost_1_33_1\tools\build\jam_src\bin.ntx86。注意:每個(gè)絕對(duì)路徑要用分號(hào)隔開(kāi)。同時(shí)要重新打開(kāi)命令提示符,因?yàn)榄h(huán)境變量只在打開(kāi)命令提示符的時(shí)候讀取一次。另外,你還可以用set命令來(lái)設(shè)置環(huán)境變量,但這樣的方法只對(duì)當(dāng)前命令提示符有效。好!言歸正傳?,F(xiàn)在我們?cè)O(shè)置了PATH。現(xiàn)在我們進(jìn)入D:\boost_1_33_1目錄,直接敲bjam,Build就會(huì)自動(dòng)開(kāi)始,并為我們生成Boost庫(kù)。生成的庫(kù)都放在bin子目錄下,本文是D:\boost_1_33_1\bin。例如你可以在D:\boost_1_33_1\bin\boost\libs\regex\build里找到前面正則表達(dá)式例子所使用的lib庫(kù)文件。前面我們說(shuō)過(guò)我們自已新建了一個(gè)d:\boost_libs目錄用于存放所有需要用到的庫(kù)文件。因?yàn)閯偛派傻奈募际欠稚⒃诓煌淖幽夸浝?,所以?dāng)你做開(kāi)發(fā)時(shí)如果遇到需要lib文件時(shí),你可以在把所需要的庫(kù)文件拷貝到d:\boost_libs里,這樣你只要統(tǒng)一設(shè)置一個(gè)庫(kù)文件目錄,就可以使用了。

  前面我們所做的工作都是把整個(gè)boost的安裝過(guò)程給分解來(lái)了,其實(shí)下面的內(nèi)容如果不做,你應(yīng)該也可以正常的使用Boost了?,F(xiàn)在我們要介紹的過(guò)程是標(biāo)準(zhǔn)的 Boost 建立和安裝過(guò)程。這部分我們將使用上面所介紹過(guò)的一些知識(shí)來(lái)做一下標(biāo)準(zhǔn)Boost的Build和Install過(guò)程。因?yàn)樯厦娴慕榻B的方法太麻煩了,我們不可能每次都用這樣的方法來(lái)安裝,我之所以還要用大幅來(lái)做介紹,主要是因?yàn)橥ㄟ^(guò)上面的這些步驟,你可以初步的對(duì)Build過(guò)程中要使用的工具和簡(jiǎn)單的Boost有一個(gè)感性的認(rèn)識(shí)。這樣的過(guò)程會(huì)幫助初學(xué)者更快的進(jìn)入角色。Boost的安裝過(guò)程其實(shí)很簡(jiǎn)單。你建立一個(gè)d:\boost目錄,然后解壓zip文件到d:\boost_1_33_1。首先用上文中介紹的方法Build bjam的可執(zhí)行文件(參與上一段的步驟),然后進(jìn)入d:\boost_1_33_1。 在命令行執(zhí)行bjam --prefix=d:\boost install 執(zhí)行后,會(huì)在d:\boost生成所需要的所有庫(kù)和頭文件。然后你用上面介紹的配置Visual Studio.NET 2003的方法配置include目錄為 D:\boost\include\boost-1_33_1,lib目錄為D:\boost\lib。這樣就大功告成了。

  我們解釋幾個(gè)重要的bjam的參數(shù),
命令行的install的意思是指要安裝庫(kù)文件和頭文件。
--prefix的意思是說(shuō)安裝獨(dú)立文件的路徑。上面我們使用的是d:\boost。
--exec-prefix的意思是說(shuō)安裝依賴文件的路徑。上面我們沒(méi)有輸入。默認(rèn)是prefix提供的目錄,所以在本例中,應(yīng)該是d:\boost
--libdir的意思是指安裝庫(kù)文件的路徑。我們上面也沒(méi)有輸入。默認(rèn)是exec-prefix提供的目錄加lib,因?yàn)楸纠衑xec-prefix使用的是prefix的目錄,所以libdir為d:\boost\lib
另外還有一些比較常用的參數(shù)如:
--includedir 這個(gè)參數(shù)是頭文件所在的目錄。默認(rèn)是PREFIX\include。比如上例中,我們的PREFIX值是d:\boost,所以頭文件就放在d:\boost\include
--with這個(gè)參數(shù)是指Build或Install單獨(dú)的庫(kù),就好像文章前半部分我們介紹的方法,但前面我們是手工做的。如果是使用這個(gè)參數(shù),則可以自動(dòng)完成指定庫(kù)的Build和Install。例如:bjam --prefix=d:\boost install --with-regex

  如果在安裝過(guò)程中我們不能編譯,說(shuō)明我們?cè)赩C的包含目錄里設(shè)置的目錄不正確,檢查一下,因?yàn)橛锌赡茉诮鈮哼^(guò)程中,boost的根目錄由d:\boost_1_33_1變成了d:\boost_1_33_1\boost_1_33_1,這時(shí)只要把根目錄提前一級(jí)就可以了。

  如果regex庫(kù)在鏈接時(shí)找不到lib文件,這說(shuō)明在VC的庫(kù)文件目錄里沒(méi)有設(shè)置所生成的文件libboost_regex-vc71-sgd-1_33_1.lib所在的目錄,這樣VC就找不到boost需要使用的lib文件。在本文中,我們是集中把生成的lib都拷貝到d:\boost_libs里,集中管理,當(dāng)然你也可能直接把庫(kù)文件目錄指向默認(rèn)目錄D:\boost_1_33_1\libs\regex\build\vc71,這個(gè)地方只要成對(duì)的匹配就可以。

  至此我們已經(jīng)完成了boost的安裝,同時(shí)我們使用兩個(gè)小程序來(lái)測(cè)試了boost的正確性。在配置了“包含文件”的路徑后,我們就可以使用大多數(shù)的boost庫(kù)了,對(duì)于一些特殊的類,我們才需要生成lib文件,如regex。Boost雖然很好,但畢竟不如STL,MFC等常見(jiàn),建議在大家在使用Boost時(shí),至少要熟悉VC的各種配置及使用。如果大家在安裝過(guò)程中遇到了其它困難,可以發(fā)e-mail:dukejoe@163.com聯(lián)系我。或者繼續(xù)關(guān)注我的Blog: http://dukejoe.yeah.net 的其它后續(xù)文章。謝謝。轉(zhuǎn)載請(qǐng)注明出處為http://dukejoe.yeah.net,并保留作者姓名和本句話,謝謝合作

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多