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模块:
#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简介相关推荐
- linux boost教程,Linux上安装使用Boost入门指导
获得boost boost分布 只需要头文件的库 使用boost建立一个简单的程序 准备使用boost二进制文件库 把你的程序链接到boost库 1.获得boost 解压 2.boost分布 boos ...
- Boost asio 官方教程简介
1. 概述 本章介绍了 Boost C++ 库 Asio,它是异步输入输出的核心. 名字本身就说明了一切:Asio 意即异步输入/输出. 该库可以让 C++ 异步地处理数据,且平台独立. 异步数据处理 ...
- Boost 入门02(字符串操作)
字符串操作 使用boost库进行字符串的操作,主要通过引入<boost/algorithm/string.hpp>,来提供操作支持. 字符串切割boost::algorithm::spli ...
- boost——入门指南
什么是boost boost库是一个开源免费的第三方库,它是一个非常优秀的库,是C++标准的最好实践之一,因此也经常被用于商业的开发.所以,如果你是搞C++的,还没有听过或用过boost,你就out了 ...
- Boost(1):Boost库简介及安装
1. Boost库介绍 Boost是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,在1998年由Beman G.Dawes发起倡议并建立.使用了许多现代C++编程技术,内容涵盖字符串 ...
- c++ Boost库之boost::bind学习
刚开始学c++,就看boost库其实有点小小的不情愿. 团队要求必掌握的Boost库: boost::bind boost::function boost::Signals2 学习前奏:在写关于coc ...
- boost::smart_ptr模块boost/pointer_to_other.hpp 的测试
boost::smart_ptr模块boost/pointer_to_other.hpp 的测试 实现功能 C++实现代码 实现功能 boost::smart_ptr模块boost/pointer_t ...
- boost::smart_ptr模块boost/pointer_cast.hpp 的测试
boost::smart_ptr模块boost/pointer_cast.hpp 的测试 实现功能 C++实现代码 实现功能 boost::smart_ptr模块boost/pointer_cast. ...
- boost::range_category和boost::iterator_category相关的测试程序
boost::range_category和boost::iterator_category相关的测试程序 实现功能 C++实现代码 实现功能 boost::range_category和boost: ...
- Boost.MultiIndex 使用 Boost.Interprocess 分配器的示例
Boost.MultiIndex 使用 Boost.Interprocess 分配器的示例 实现功能 C++实现代码 实现功能 Boost.MultiIndex 使用 Boost.Interproce ...
最新文章
- 用Python打造一款文件搜索工具,所有功能自己定义
- 2017-07-19 前端日报
- php preg_replace 正则替换图片路径
- 新浪是如何分析处理32亿条实时日志的?
- python实现傅里叶变换求幅值和相位_Python 实现图像快速傅里叶变换和离散余弦变换...
- 计算机降序符号,rank函数降序排名
- [HAOI 2010]订货
- 图解TCPIP-以太网(物理层)
- 多速率多传感器数据融合估计(一)
- 网友神总结:我们继续用 XP 的十大理由
- C#Code128条形码生成
- #loj3090 [BJOI2019] 勘破神机
- msgbox.html5.qq .com,霸道总裁之代码强势表白
- cocos2dx内存优化
- 系统设计文档结构体例理解与决策
- 基于springboot的中医健康管理系统
- 安卓系统再曝高危漏洞!大部分手机都可能被黑客控制
- cisco 华三 对接_H3C S5500与思科3750对接二层链路聚合的典型组网配置案例
- Java学习笔记(第6天)
- C语言中函数指针数组的初始化和使用
热门文章
- WebIM 网页聊天工具
- uniapp中如何使用微信SDK
- javascript/html breakout game 打砖块游戏(附代码)
- Ubuntu 解压缩7z文件
- android自动秒杀脚本,京东自动秒杀脚本手机版-京东自动秒杀脚本安卓版下载v7.0.4 - 7230手游网...
- 改善网页性能的5种方法
- 英语四级考试在即,这几个超有用的App赶紧用起来,顺利考过四级
- mysql为何不建议使用外键
- 买菜总结之三--水果篇
- Exception in thread “main“ java.lang.ArrayIndexOutOfBoundsException: 6 at lian39.main(lian39