boost入门(一):boost简介

前言

发现自己做为C++,竟然没有用过boost。特地学习下如何使用boost,我作为初学者,会从入门指南开始,一点点深入了解boost。

本文采用的版本是boost 1.75.0

boost 介绍

boost 是一个跨平台的C++工具库,是的,没错!相当于一个大的工具集合。当然boost没有那么全面,比如界面库就没有。

首先到官网下载boost,我选择的是boost 1.75.0 Windows版本。可以阅读发行版本的文档,来查看boost包含有哪些工具,我就不一一列出来,可以去boost 1.75.0 documentation看下。

boost 直接引入hpp

boost是多个库的集合,有些库采用hpp头文件编写。我们如果要用这种库,直接引用头文件即可。

首先设置项目直接引入boost的头文件:

接下来就能使用使用boost的头文件了。以下是引用Boost.Lambda模块:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
using namespace boost::lambda;
typedef std::istream_iterator<int> in;

std::for_each(
in(std::cin), in(), std::cout << (_1 * 3) << " ");
}

这个代码的功能是把输入的数字*3,然后再输出。

具体代码我们不用看,只要看到运行结果,说明我们成功调用了boost库中的Lambda模块。是不是很简单?

boost 构建

boost中有些库需要构建,那么就需要借助b2.exe程序了。我们可以把b2.exe理解成预编译器,它会告诉真正的编译器如何进行编译。

b2.exe 默认在目录下是没有的,需要运行tools\build 目录下的bootstrap.bat

从图可以看出,运行bootstrap.bat,会编译出b2.exe

有了b2.exe,我们下一步就是安装了。安装格式为 b2 install –prefix = PREFIX ,其中PREFIX为要安装Boost.Build的目录。比如我要安装在F:\C++\boost_1_75_0\build,那么命令行:

1
b2 install --prefix=F:\C++\boost_1_75_0\build

最后一步,可选。将F:\C++\boost_1_75_0\build\bin添加到环境变量中,以便命令行在哪个目录都可以用b2

下面开始重头戏,编译boost。F:\C++\boost_1_75_0\builds代表编译过程中的中间文件。

在命令行中输入:

1
b2 --build-dir=F:\C++\boost_1_75_0\builds toolset=msvc --build-type=complete stage

编译过程有点慢,请耐心等待!编译的结果在F:\C++\boost_1_75_0\stage\lib目录下

编译完之后,我们在项目上添加附加库目录:

编译完之后,我们演示下与Boost二进制库的链接:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <boost/regex.hpp>
#include <iostream>
#include <string>

int main()
{
std::string line;
boost::regex pat("^Subject: (Re: |Aw: )*(.*)");

while (std::cin)
{
std::getline(std::cin, line);
boost::smatch matches;
if (boost::regex_match(line, matches, pat))
std::cout << matches[2] << std::endl;
}
}

PS:因为VS编译器可以自动链接到库,所以我们不需要手动添加依赖库

boost 构建的命名规则

我们可以找一个库 libboost_regex-vc142-mt-gd-x32-1_75.lib 进行分解:

lib

​ 前缀:除Windows外,每个boost库名称都以该字符串开头。在Windows上,只有静态库才会以lib开头

boost_regex

​ 库名称:所有boost库文件名都以 boost_ 开头

-vc142

​ 平台工具集,看图:

-mt

​ 线程:如果有这个标记就代表该库是在启用多线程支持的情况下构建的,没有的话就代表没有多线程支持

-gd

​ ABI(Application Binary Interface,ABI):对影响库与其他已编译代码互操作性的细节编码。简单来说编译模式:

关键字当使用这个库的时候Boost.Build 选项
s静态链接runtime-link=static
g优化后的调试版本,俗称release带调试信息版本runtime-debugging=on
y使用python的特殊调试版本python-debugging=on
d没有优化调试版本,俗称debug版本variant=debug
p使用STLPort标准库,而不是编译器随附的默认库stdlib=stlport

Boost.Build 选项是b2.exe运行的选项

x32

​ 指的是32位程序,有两种模式:x32和x64。官方文档这个地方没有更新,我编译出来的是x32,官网上写的x86。

-1_75

​ boost的版本号,代表我所使用的1.75.0,因为没有小版本号所以就省略了0

.lib

​ 扩展名:根据操作系统约定确定。Linux为.a和.so,Windows为.lib和.dll

补充

如果想特定的编译boost库,可以看b2 用户手册,手册写的很详细。

接下来,我会写关于Asio库。请看下一篇:《boost入门(二):Asio的简介》

有什么问题,我会及时回复。

评论