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

1. Boost库介绍

Boost是一个功能强大、构造精巧、跨平台、开源并且完全免费的C++程序库,在1998年由Beman G.Dawes发起倡议并建立。使用了许多现代C++编程技术,内容涵盖字符串处理、正则表达式、容器与数据结构、并发编程、函数式编程、泛型编程、设计模式实现等许多领域,极大地丰富了C++的功能和表现力,能够使C++软件开发更加简洁、优雅、灵活和高效。

Boost库可以与C++标准库完美共同工作,并且为其提供扩展功能。大部分Boost库功能的使用之需要包括相应的头文件即可,少数需要连接库。

1.1 获取方式

Boost社区根据目标平台的操作提供了Linux和Windows版本,支持预编译版本和源代码版本的安装。

# 官方网站
https://www.boost.org/

# 下载地址
https://www.boost.org/users/download/

# 预编译版本下载地址
https://sourceforge.net/projects/boost/files/boost-binaries/


1.2 代码结构

最上层结构

boost_1_73_0$ tree -L 1 -d
├── boost                 # 最重要的目录和说明文件
├── doc                   # HTML 格式的文档,也可以生成PDF格式文档
├── libs                  # 所有组件的示例、测试、编译代码和说明文档
├── more                  # 库作者相关的文档
├── status                # 可用于测试Boost库的各个组件
└── tools                 # b2、quickbook等自带工具

Boost目录结构
boost子目录里面包含了我们可能使用到的所有的库代码,按照类型分别放在不同的目录中,通常我们只要关心这个目录就够了。

/boost_1_73_0/boost$ tree -d -L 1
├── accumulators          # 累加器库
├── algorithm             # 算法库
├── align                 # 内存对齐库
├── archive               # 序列化库
├── asio                  # 异步并发库
├── assert                # 断言库
├── assign                # 赋值初始化库
├── atomic                # 原子操作库
├── beast
├── bimap                # 双向关联数组
├── bind                 # bind表达式
├── callable_traits
├── chrono               # 时间处理库
...
├── python               # python库
...


1.3 使用方式

在安装环境后,使用大部分的Boost库只需要在自己的源代码里包含对应库的头文件即可。如:

#include <boost/python.hpp>
#include <boost/python/list.hpp>
#include <boost/python/module.hpp>
#include <boost/assert.hpp>


2. 开发环境安装

2.1 Windows环境安装

这里介绍在Windows环境下安装预编译版本的boost库,以Boost_1.73.0为例。

预编译版本安装比较简单,只要下载指定版本并安装就可以。

1. 下载boost_1_73_0

预编译版本下载地址为:
https://astuteinternet.dl.sourceforge.net/project/boost/boost-binaries/1.73.0/boost_1_73_0-msvc-14.0-64.exe

2. 安装

双击安装在C:\boost_1_73_0

3. boost与python版本对照

完全安装下会安装Python库,而Python库与当前系统下的python版本存在对应关系,可根据下表查找相应的boost库。

boostpython
1_73_03.8.2
1_72_03.8.0
1_71_03.7.4
1_70_03.7.2
1_69_03.7.0


2.2 Linux环境安装

这里介绍使用源代码编译安装的方式,以Boost_1.73.0为例

1. 下载源代码

wget https://boostorg.jfrog.io/artifactory/main/release/1.73.0/source/boost_1_73_0.tar.bz2 --no-check-certificate

2. 编译安装

tar xvf boost_1_73_0.tar.bz2

cd boost_1_73_0

./boostrap.sh
./b2 --buildtype=complete install

boost有大量的库其实可以选择安装指定的库,这里为了方便我选择完全安装。

安装boost库时我直接按照默认的路径安装,最后会在/usr/local/lib目录下安装所有编译的libboost*库。如果需要指定路径,可以在编译时添加"–prefix=xxx"的路径参数,这样的话在安装后还需要手动将该路径添加到环境变量中。

如果系统中有多个python版本,可以通过"–with-python=python*"来指定python版本,默认情况下使用系统默认的版本。

3. 定制安装

完整编译费时费力,而且大部分的库可能在我们的开发过程中根本用不到,所以用户可以自行选择要编译的库。
相关执行命令如下:

查看所有必须编译才能使用的库

./b2 --show-libraries

在完全编译命令的基础上,使用–with或–without选项可以打开或者关闭某个库的编译,如:

./b2 --with-date_time --buildtype=complete install

将仅编译安装data_time库

3. 参考资料

《Boost程序库完全开发指南》
https://www.boost.org/doc/libs/1_73_0/

  • 12
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
`boost::asio::io_service`是Boost中的一个核心类,用于提供异步I/O操作的事件循环机制。它是实现异步网络编程的基础,可用于处理各种网络通信任务。 `boost::asio::io_service`的主要作用是管理和调度异步操作。它负责处理事件循环,监视和分发I/O事件,以及执行注册的回调函数。通过使用`io_service`对象,可以实现非阻塞式的异步I/O编程,提高程序的并发性和响应性。 以下是`boost::asio::io_service`类的常见用法示例: ```cpp #include <boost/asio.hpp> void handleRead(const boost::system::error_code& error, std::size_t bytes_transferred) { if (!error) { // 处理读取数据的回调逻辑 } else { // 处理错误情况 } } int main() { boost::asio::io_service io_service; // 创建一个socket对象 boost::asio::ip::tcp::socket socket(io_service); // 连接到服务器 socket.connect(endpoint); // 异步读取数据 boost::asio::async_read(socket, boost::asio::buffer(buffer), handleRead); // 开始事件循环 io_service.run(); return 0; } ``` 在上述示例中,首先创建了一个`io_service`对象,然后创建了一个TCP socket对象,并使用`io_service`对象进行异步读取操作。在`async_read`函数中,指定了一个回调函数`handleRead`,用于处理读取数据完成后的回调逻辑。 最后,通过调用`io_service`的`run()`函数启动事件循环,使程序进入等待事件的状态。在事件循环中,`io_service`会不断地监视和分发I/O事件,并执行注册的回调函数。 使用`boost::asio::io_service`,可以方便地实现异步的网络编程,处理各种I/O操作,如读取、写入、连接、接收等。它提供了高度灵活和可扩展的方式来构建异步应用程序。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翔底

您的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值