前言

发现自己做为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模块:

#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,那么命令行:

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代表编译过程中的中间文件。

在命令行中输入:

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二进制库的链接:

#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的简介》

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

boost入门(一):boost简介相关推荐

  1. linux boost教程,Linux上安装使用Boost入门指导

    获得boost boost分布 只需要头文件的库 使用boost建立一个简单的程序 准备使用boost二进制文件库 把你的程序链接到boost库 1.获得boost 解压 2.boost分布 boos ...

  2. Boost asio 官方教程简介

    1. 概述 本章介绍了 Boost C++ 库 Asio,它是异步输入输出的核心. 名字本身就说明了一切:Asio 意即异步输入/输出. 该库可以让 C++ 异步地处理数据,且平台独立. 异步数据处理 ...

  3. Boost 入门02(字符串操作)

    字符串操作 使用boost库进行字符串的操作,主要通过引入<boost/algorithm/string.hpp>,来提供操作支持. 字符串切割boost::algorithm::spli ...

  4. boost——入门指南

    什么是boost boost库是一个开源免费的第三方库,它是一个非常优秀的库,是C++标准的最好实践之一,因此也经常被用于商业的开发.所以,如果你是搞C++的,还没有听过或用过boost,你就out了 ...

  5. Boost(1):Boost库简介及安装

    1. Boost库介绍 Boost是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,在1998年由Beman G.Dawes发起倡议并建立.使用了许多现代C++编程技术,内容涵盖字符串 ...

  6. c++ Boost库之boost::bind学习

    刚开始学c++,就看boost库其实有点小小的不情愿. 团队要求必掌握的Boost库: boost::bind boost::function boost::Signals2 学习前奏:在写关于coc ...

  7. boost::smart_ptr模块boost/pointer_to_other.hpp 的测试

    boost::smart_ptr模块boost/pointer_to_other.hpp 的测试 实现功能 C++实现代码 实现功能 boost::smart_ptr模块boost/pointer_t ...

  8. boost::smart_ptr模块boost/pointer_cast.hpp 的测试

    boost::smart_ptr模块boost/pointer_cast.hpp 的测试 实现功能 C++实现代码 实现功能 boost::smart_ptr模块boost/pointer_cast. ...

  9. boost::range_category和boost::iterator_category相关的测试程序

    boost::range_category和boost::iterator_category相关的测试程序 实现功能 C++实现代码 实现功能 boost::range_category和boost: ...

  10. Boost.MultiIndex 使用 Boost.Interprocess 分配器的示例

    Boost.MultiIndex 使用 Boost.Interprocess 分配器的示例 实现功能 C++实现代码 实现功能 Boost.MultiIndex 使用 Boost.Interproce ...

最新文章

  1. 用Python打造一款文件搜索工具,所有功能自己定义
  2. 2017-07-19 前端日报
  3. php preg_replace 正则替换图片路径
  4. 新浪是如何分析处理32亿条实时日志的?
  5. python实现傅里叶变换求幅值和相位_Python 实现图像快速傅里叶变换和离散余弦变换...
  6. 计算机降序符号,rank函数降序排名
  7. [HAOI 2010]订货
  8. 图解TCPIP-以太网(物理层)
  9. 多速率多传感器数据融合估计(一)
  10. 网友神总结:我们继续用 XP 的十大理由
  11. C#Code128条形码生成
  12. #loj3090 [BJOI2019] 勘破神机
  13. msgbox.html5.qq .com,霸道总裁之代码强势表白
  14. cocos2dx内存优化
  15. 系统设计文档结构体例理解与决策
  16. 基于springboot的中医健康管理系统
  17. 安卓系统再曝高危漏洞!大部分手机都可能被黑客控制
  18. cisco 华三 对接_H3C S5500与思科3750对接二层链路聚合的典型组网配置案例
  19. Java学习笔记(第6天)
  20. C语言中函数指针数组的初始化和使用

热门文章

  1. WebIM 网页聊天工具
  2. uniapp中如何使用微信SDK
  3. javascript/html breakout game 打砖块游戏(附代码)
  4. Ubuntu 解压缩7z文件
  5. android自动秒杀脚本,京东自动秒杀脚本手机版-京东自动秒杀脚本安卓版下载v7.0.4 - 7230手游网...
  6. 改善网页性能的5种方法
  7. 英语四级考试在即,这几个超有用的App赶紧用起来,顺利考过四级
  8. mysql为何不建议使用外键
  9. 买菜总结之三--水果篇
  10. Exception in thread “main“ java.lang.ArrayIndexOutOfBoundsException: 6 at lian39.main(lian39