隨著技術(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)該類似 打開(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
這個(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á)式功能
這個(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ù), 如果在安裝過(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,并保留作者姓名和本句話,謝謝合作 |
|
來(lái)自: @IT小小鳥(niǎo)@ > 《C/C》