Boost介绍:
Boost库由C++标准委员会库工作组成员发起,向C++程序员提供免费的(free)、同行审查的(peer review)、可移植的(portable)高质量C++源程序库。为我们带来的是最新最前沿的技术,也可以说是一个不折不扣的“准”标准库;boost库功能组件众多,内容非常的“庞大”;我们常用的也是比较有名气的几个库:Regex(正则表达式库)、smart_ptr(智能指针)、Thread(可移植的C++多线程库)、Graph(图形组件和算法)、Pool(内存池管理)等。
详细的内容见Boost官网:http://www.boost.org/。
关于boost安装和boost库的“瘦身”网上的教程比较的多,也比较的乱,这里我整理了一下,下面介绍一下:
Boost安装:
这里以windows下面的安装为例,步骤如下:
1. 从boost网站(http://www.boost.org/)上下载安装包boost_1_55_0.zip(目前版本是1.55.0),安装包大约为98 MB,解压到磁盘的任意位置,注意要预留足够大的磁盘空间,解压完全安装后大约需要几个G的空间;
2. 解压完成,到其解压目录下运行bootstrap.bat,生成bjam.exe文件(bjam.exe是生成boost库的.lib文件的工具);
3. 命令行运行bjam编译:
这里编译分为两种:完全编译和部分编译;
完全编译:
完全编译会生成所有的debug,release版的静态库和动态库;
命令行: bjam--toolset=msvc-11.0 --build-type=complete stage
部分编译:
很多库我们在开发过程中并不会用到,完全编译费时费力,我们可以使用bjam仅对我们需要的库进行编
译;如: bjam --toolset=msvc-11.0 --with-date_time,该命令行就仅编译了date_time库;
注:bjam参数见图片14. 编译完成后可以到boost\bin.v2目录下面找到生成的*.dll和*.lib;
boost库的命名规则:
boost编译完成后,我们到boost\bin.v2目录下会找到很多*.lib文件;库文件名相似而且都比较长,名字中各部分都代表什么意思呢,下面介绍一下:
举一个例子说明如下:
libboost_filesystem-vc110-mt-gd-1_55.lib
前缀: 统一为lib;
库名字: 以boost_开头,这里是boost_filesystem
编译器标示:编译该库的编译器名称和版本 这里是vc110;
多线程标示:支持多线程使用-mt标示,没有这个标示表示不支持;
ABI标示: 标示了boost库的几个编译连接选项,这里是gd;
gd: dubug版
s : 静态库标示
版本号: boost版本号,这里是1_55;
Boost"瘦身":
boost库是很棒的库,但是boost太过于庞大了,使用起来非常的不方便;bcp的出现解决了这个问题,bcp是一个专门用于提取boost子集的工具,非常有用。
下面介绍一下bcp的使用:
1.拷贝boost根目录下面的bjam.exe到tools\bcp目录下,点击运行或者使用命令行运行bjam.exe;
3.命令行运行bcp,在命令行中直接运行bcp.exe就可以看到所有命令帮助如下图;
a、bcp --list [options] module-list 列出module-list及其所依赖的文件列表;如options是boost/smart_ptr,就会列出与库smart_ptr相关的所有文件;
使用boost:
介绍完了boost“瘦身”了,我们就可以放心的使用了,boost库的大部分组件(近90%)不需要编译,直接包含头文件既可以,例如我们要使用smart_ptr这个库,我们只需要在我们的源文件包含下面内容:
#include <boost/smart_ptr.hpp> //使用smart_ptr库
当然还需要using namespace boost这个;
PS:我们也看到了,boost库文件与我们平常使用的头文件不同,boost把C++类的声明和实现放在了一个文件中,而不是分成两个文件,所以文件的后缀都是*.hpp;这样做的原因有两个:
1.就是和普通的头文件区分;
2.boost不需要预先编译,直接引入工程即可编译链接,方便库的使用;
当然还有十几个库需要编译成静态库或动态库才可以使用;库的包含方式如普通的库文件一样,这里就不加赘述了;