Boost库的介绍
Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。
1. Boost库中比较有名的几个库:
2. Regex,正则表达式库;
3. Spirit,LL parser framework,用C++代码直接表达EBNF;
4. Graph,图组件和算法;
5. Lambda,在调用的地方定义短小匿名的函数对象,很实用的functional功能;
6. concept check,检查泛型编程中的concept;
7. Mpl,用模板实现的元编程框架;
8. Thread,可移植的C++多线程库;
9. Python,把C++类和函数映射到Python之中;
10. Pool,内存池管理;
11. smart_ptr,智能指针
Boost库的编译
1. 打开Visual Studio2008 命令提示窗口
2. 进入D: /boost_1_44_0/tools/jam/src
3. 执行 build.bat 会在D:/ boost_1_44_0/tools/jam/src/bin.ntx86 生成 bjam.exe
4. 拷贝bjam.exe 到 D:/ boost_1_44_0 下
5. 进入D:/boost_1_44_0 目录
6. 执行bjam.exe 编译命令,如下:
编译所有boost动态库(release|debug),包括头文件和库文件
bjam --toolset=msvc-9.0 --prefix=D: /boost_1_44_0/output--without-python --build-type=complete link=shared threading=multi install
只编译 release 版本 regex 动态库,包括头文件和库文件
bjam --toolset=msvc-9.0 --prefix=D:/boost_1_44_0/output1--with-regex link=shared threading=multi variant=release runtime-link=shared install
只编译 release 版本 regex 动态库,包括库文件
bjam --toolset=msvc-9.0--stagedir=D: /boost_1_44_0/output2
--with-regex link=shared threading=multivariant=release runtime-link=shared stage
注意:Boost源代码所在路径最好全英文,不要有空格、特殊字符、中文等,VS对应的工具集名称如下
VC6.0:msvc-6.0、
VS2003:msvc-7.0
VS2005:msvc-8.0
VS2008:msvc-9.0
VS2010:msvc-10.0
7. 设置开发环境
打开VS2008 创建工程, 配置工程属性
设置包含文件目录D:/Develop/BoostlibAndDll/include/boost-1_44_0/boost
设置引用文件目录:F:/Develop/BoostlibAndDll/lib
生成库文件名规则
编译成功后,bjam都会给你生成一对一样的导入库文件或者静态库文件(如下),唯一不同的是两个文件名称一个在后面加上了boost版本信息, 为了让用户知道使用的boost的版本信息。
boost_regex-vc90-xxxxx.lib
boost_regex-vc90-xxxxx-1_44.lib
bjam编译选项 有4个, 理论上应该有 2*2*2*2 = 16 种配置
link= static| shared
threading=single |multi
variant=release|debug
runtime-link= static |shared
实际使用的多为多线程,所以 threading=multi, 这样剩下的3个选项组成的编译配置就是上面所罗列的,其中静态链接C++标准库的boost动态库这种配置也不存在,所以就只有4种情况。
link= static :静态库。 生成的库文件名称以 “lib”开头
link= shared :动态库。生成的库文件名称无“lib”开头
threading=mult : 支持多线程。 生成的库文件名称中包含“-mt”
variant=release 生成的库文件名称不包含“-gd”
variant= debug 生成的库文件名称包含“-gd”
runtime-link= static 生成的库文件名称包含“-s”
runtime-link= shared 生成的库文件名称不包含“-s”