作者:高宏伟(DukeJoe)
地点:黑龙江省哈尔滨市平房区
Blog:http://dukejoe.yeah.net
QQ:21807822
随着技术的进步,人们对软件项目的要求日益提高。Boost库作为一个优秀的C++类库,通过几年的发展已经得到了广大技术人员的认可。本文将帮助刚刚接触Boost的用户来安装并配置Boost,并通过几个HelloWorld小程序,来验证安装的正确性。并且我也希望能通过这几个小程序使读者能对Boost有一个初步的认识,并尽快加入Boost的用户行列。在写本文的时候,我所使用的环境是Windows XP Home Edition + Boost1.33.1 + Visual Studio .NET 2003
首先是从Boost的主页上下载相关的Boost的压缩包,我下载的是boost_1_33_1.zip,假定我们解压到D盘根目录。解压后的目录结构应该类似
boost_1_33_1<目录>
-- boost <目录>
-- doc <目录>
-- libs <目录>
-- more <目录>
等等这些目录和文件。
打开Visual Studio .NET 2003 选择菜单 工具-->选项-->项目-->VC++目录,在“包含文件目录”里,增加一行,如:D:\boost_1_33_1。这样你就可以使用大多数的Boost类库。现在我们来写一个小程序,感受一下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 ;
}
|
这个程序的功能是向vector里压入int,如果压入的不是int,而程序应该可以抛出异常,主程序通过捕获异常来确定程序的运行错误。程序本应该在vector里存入0到9的10个数,但我们强行在iLength等于5时,压入一个错误类型的值DukeJoe,这时程序应抛出异常,而catch捕获异常bad_lexical_cast,将-1压入vector,所以我们得到的这10个数中的第5个数,实际没有压入,而这个位置上我们看到的是在异常处理过程中压入的-1。lexical_cast的作用是进行简单的类型转换,如果转换不成功,则它会抛出一个异常bad_lexical_cast。关于lexical_cast的详细说明可以看一下Boost关于lexical_cast的文档。
直接在VS2003里的包含目录加入boost的目录后,绝大多数的类库就可以使用了,但还有少数的类库需要额外再生成对应操作系统的动态库,才可以使用。我们以Windows+VS2003为环境,以regex类库举例说明。regex为我们提供了正则表达式功能,其中boost的regex支持perl语法,更极大的提升了我们使用正则表达式所产生的效果。但要想使用regex,我们需要生成相关的lib文件才可以。生成的步骤如下:开始 --> Microsoft Visual Studio.NET 2003 --> Visual Studio.NET 工具 --> Visual Studio.NET 2003 命令提示。使用这个命令提示符之后,VS就会为我们自动配置好VC环境。打开命令提示符之后,我们进入目录 D:\boost_1_33_1\libs\regex\build ,现在我们敲入 nmake /fvc71.mak 生成lib文件。生成lib文件之后,我们单独建一个文件夹,例如我建立的是d:\boost_libs,然后把所有的*.lib文件拷贝到这个目录。然后我们打开VS2003,选择菜单 工具-->选项-->项目-->VC++目录,在“库文件”里加入目录d:\boost_libs,这样VS2003在链接时,就会搜索这个目录
下面我们来看一个小程序,测试一下正则表达式功能
#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;
}
|
这个程序我们使用的是宽字符,主要是因为我们要匹配汉字。程序中的strSample是一个样本,我们使用的正规表达式是rgExpression,构造函数的boost::regex::perl说明我们使用perl语法规则。正规表达式为我们先匹配[]中间的城市名称,然后还为我们匹配了一个带年月日的时间格式,所以在这个程序中对我们有用的是what[2]和what[5],分别匹配出用户的所在地(哈尔滨)和用户的时间(2007-05-15)。由于C语言的语法规定反斜杠为转义字符,所以在我们构造正规表达式时,我们要用两个反斜杠。regex_match用来进行实际的匹配工作。关于boost的正则表达式的用法,已经超出了本文的范围,本文将精力主要集中在使用这个程序验证boost安装过程上。以后有机会,我尽量在Blog上再写几篇专门介绍Boost Regex 正规表达式使用的文篇。如果大家编译上面的程序,在链接时没有报错,就是正确链接了lib库文件。通过程序的输出结果,说明程序运行正常,我们的库也就是安装正确了。
下面我们使用Boost.Jam来Build所有的库。首先,我们再次打开VC.NET 2003的命令提示符,然后进入D:\boost_1_33_1\tools\build\jam_src目录,运行build.bat。这时我们会生成bjam的可执行程序。在本文中,Build过程会在jam_src下生成bin.ntx86这个子目录。现在我们来配置一下环境变量PATH,以便用bjam来build boost。配置步骤如下:右键我的电脑-->属性-->高级-->环境变量,在PATH这个变量后面加入bin.ntx86所在的绝对路径。例如我的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。注意:每个绝对路径要用分号隔开。同时要重新打开命令提示符,因为环境变量只在打开命令提示符的时候读取一次。另外,你还可以用set命令来设置环境变量,但这样的方法只对当前命令提示符有效。好!言归正传。现在我们设置了PATH。现在我们进入D:\boost_1_33_1目录,直接敲bjam,Build就会自动开始,并为我们生成Boost库。生成的库都放在bin子目录下,本文是D:\boost_1_33_1\bin。例如你可以在D:\boost_1_33_1\bin\boost\libs\regex\build里找到前面正则表达式例子所使用的lib库文件。前面我们说过我们自已新建了一个d:\boost_libs目录用于存放所有需要用到的库文件。因为刚才生成的文件都是分散在不同的子目录里,所以当你做开发时如果遇到需要lib文件时,你可以在把所需要的库文件拷贝到d:\boost_libs里,这样你只要统一设置一个库文件目录,就可以使用了。
前面我们所做的工作都是把整个boost的安装过程给分解来了,其实下面的内容如果不做,你应该也可以正常的使用Boost了。现在我们要介绍的过程是标准的 Boost 建立和安装过程。这部分我们将使用上面所介绍过的一些知识来做一下标准Boost的Build和Install过程。因为上面的介绍的方法太麻烦了,我们不可能每次都用这样的方法来安装,我之所以还要用大幅来做介绍,主要是因为通过上面的这些步骤,你可以初步的对Build过程中要使用的工具和简单的Boost有一个感性的认识。这样的过程会帮助初学者更快的进入角色。Boost的安装过程其实很简单。你建立一个d:\boost目录,然后解压zip文件到d:\boost_1_33_1。首先用上文中介绍的方法Build bjam的可执行文件(参与上一段的步骤),然后进入d:\boost_1_33_1。 在命令行执行bjam --prefix=d:\boost install 执行后,会在d:\boost生成所需要的所有库和头文件。然后你用上面介绍的配置Visual Studio.NET 2003的方法配置include目录为 D:\boost\include\boost-1_33_1,lib目录为D:\boost\lib。这样就大功告成了。
我们解释几个重要的bjam的参数,
命令行的install的意思是指要安装库文件和头文件。
--prefix的意思是说安装独立文件的路径。上面我们使用的是d:\boost。
--exec-prefix的意思是说安装依赖文件的路径。上面我们没有输入。默认是prefix提供的目录,所以在本例中,应该是d:\boost
--libdir的意思是指安装库文件的路径。我们上面也没有输入。默认是exec-prefix提供的目录加lib,因为本例中exec-prefix使用的是prefix的目录,所以libdir为d:\boost\lib
另外还有一些比较常用的参数如:
--includedir 这个参数是头文件所在的目录。默认是PREFIX\include。比如上例中,我们的PREFIX值是d:\boost,所以头文件就放在d:\boost\include
--with这个参数是指Build或Install单独的库,就好像文章前半部分我们介绍的方法,但前面我们是手工做的。如果是使用这个参数,则可以自动完成指定库的Build和Install。例如:bjam --prefix=d:\boost install --with-regex
如果在安装过程中我们不能编译,说明我们在VC的包含目录里设置的目录不正确,检查一下,因为有可能在解压过程中,boost的根目录由d:\boost_1_33_1变成了d:\boost_1_33_1\boost_1_33_1,这时只要把根目录提前一级就可以了。
如果regex库在链接时找不到lib文件,这说明在VC的库文件目录里没有设置所生成的文件libboost_regex-vc71-sgd-1_33_1.lib所在的目录,这样VC就找不到boost需要使用的lib文件。在本文中,我们是集中把生成的lib都拷贝到d:\boost_libs里,集中管理,当然你也可能直接把库文件目录指向默认目录D:\boost_1_33_1\libs\regex\build\vc71,这个地方只要成对的匹配就可以。
至此我们已经完成了boost的安装,同时我们使用两个小程序来测试了boost的正确性。在配置了“包含文件”的路径后,我们就可以使用大多数的boost库了,对于一些特殊的类,我们才需要生成lib文件,如regex。Boost虽然很好,但毕竟不如STL,MFC等常见,建议在大家在使用Boost时,至少要熟悉VC的各种配置及使用。如果大家在安装过程中遇到了其它困难,可以发e-mail:dukejoe@163.com联系我。或者继续关注我的Blog: http://dukejoe.yeah.net 的其它后续文章。谢谢。转载请注明出处为http://dukejoe.yeah.net,并保留作者姓名和本句话,谢谢合作
相关推荐
### VS+Qt+Mysql+addin+boost安装指南 #### 环境搭建概述 本文主要介绍了如何在Windows 7 32位操作系统下搭建基于VS2013的开发环境,具体包括Boost 1_61_0、Qt 5.2以及MySQL的安装配置流程。对于初学者来说,按照...
《Boost开发指南》是一本深度剖析Boost库的权威著作,对于深入理解和应用C++编程有着极大的帮助。Boost库是C++社区的一个重要贡献,它提供了一系列高质量、经过充分测试的C++模板类库,旨在增强C++的标准库,提高...
2. 开发环境准备:解释如何搭建开发环境,包括安装Boost库以及配置编译器等,确保读者可以在自己的计算机上开始实践。 3. Boost的基础组件:介绍Boost中的基础组件,比如Boost.Any,Boost.Serialization,Boost....
《深入解析Boost线程库:从管理到同步的全面指南》 在计算机科学领域,多线程编程一直是软件开发中的关键技术之一,它允许程序在多个CPU核心上并行执行任务,从而提高系统的性能和响应速度。Boost线程库,作为Boost...
BOOST程序库完全开发指南:深入C++“准”标准库(第3版) 以及boost源码1.71.0 BOOST程序库完全开发指南:深入C++“准”标准库(第3版) 以及boost源码1.71.0 BOOST程序库完全开发指南:深入C++“准”标准库(第3...
**BOOST程序库完全开发指南** 在C++编程领域,BOOST程序库是一个不可或缺的资源,它为开发者提供了大量的高质量、经过严格测试的库组件,极大地扩展了C++的标准库功能。这本书——《BOOST程序库完全开发指南》正是...
Boost是一个集众多功能于一身的C++程序库,它不仅功能丰富、构造精巧,而且具有跨平台、开源、完全免费的特点。由于其强大的功能和对C++语言的补充,它被誉为C++“准”标准库。这个库是由C++标准委员会的成员创建的...
《Boost程序库完全开发指南》是一本专注于C++ Boost库的详细教程,旨在帮助开发者深入理解和有效利用这个强大的C++工具集。Boost库是C++社区的一个重要贡献,它为C++程序员提供了许多高效、高质量的库,这些库在很多...
该书是Boost程序库完全开发指南第3版,有书签,高清扫描版pdf适合下载学习。
boost线程指南手册.pdf
boost程序库完全开发指南,c++程序员 的利器
AWR1443boost 板载天线、J6/J5 连接器、micro USB 数据线、Bumpon™ 安装支架、M3 螺丝、M3 螺母、跳线帽等组件,使其成为一个功能完备的评估平台。 JTAG 接口 J6/J5 连接器用于将 BoosterPack™ 与 LaunchPad™ ...
boost 是 C++ 所谓的“准标准库”,是 C++ 标准库的实验场,其所提供的智能指针 shared_ptr 已经被收入 C++ 的新标准。boost 包含大量设计精巧、功能强大、性能卓越的组件,如智能指针、函数对象、lambda表达式、...
### Boost库学习指南 #### 一、Boost库简介与价值 Boost库是一个广泛使用的开源C++库集合,它为开发者提供了丰富的工具集来简化和优化C++编程过程。该库的特点在于其高质量的代码和广泛的适用性,适用于多种操作...
boost是一个功能强大、构造精巧、跨平台、开源并且完全免费的c++程序库,有着“c++‘准’标准库”的美誉。 本书基于boost1.42版,介绍了其中的所有99个库,并且详细深入地讲解了其中数十个库,同时实现了若干颇具...
对于不同的操作系统,Boost库提供了详细的安装指南,确保开发者能够顺利地在自己的开发环境中集成Boost库。 1.4 **概述** 本章主要介绍了Boost库的整体架构和设计理念,让读者对Boost库有一个全面的认识,为后续...
### Boost程序库完全开发指南——深入C++“准”标准库 #### 一、Boost库简介 Boost库是一组高质量的、经过同行评审的、可移植的C++源代码库集合,它为C++程序员提供了丰富的功能。这些库涵盖了算法、容器、泛型...
标题中的“boost开发指南”直接指向了知识点的主体,即Boost库。Boost是一个广泛使用的、跨平台的C++库集合,它提供了丰富的模板编程工具,旨在为C++开发者提供与标准库相辅相成的组件。这些组件包括但不限于智能...
### Boost库学习指南 #### 一、Boost库简介与重要性 Boost库作为一个高质量、开源且免费的C++库集合,对于C++开发者而言具有重要的意义。它不仅提供了丰富的功能,还极大地提升了C++程序的开发效率。由于Boost库的...