Boost编译使用

Boost编译使用

文章目录

  • Boost编译使用
    • 写在前面
      • 测试环境
    • 下载
    • 编译
      • 目录结构
      • 直接使用
      • 手动编译
        • Boost.Build
        • 编译
      • 参考
    • 使用
      • Vs中使用
      • Qt中使用
      • CMake中使用
      • 代码中使用

写在前面

Boost 是一个非常强大的 C++ 开源库,提供了许多高质量的、经过良好测试的 C++ 组件。

Boost 的主要特点包括广泛的功能覆盖、高质量和可靠性、跨平台性以及活跃的社区。Boost 涵盖了 C++ 标准库中众多常用功能的扩展和补充,包括容器、智能指针、正则表达式、日期时间、并发、序列化等。这些组件经过了广泛的测试和审核,确保了其高度的可靠性和安全性,许多 Boost 库已经成为 C++ 标准库的一部分。Boost 可以在众多主流操作系统和编译器上运行,确保了代码的可移植性。同时,Boost 拥有一个非常活跃的开源社区,不断有新的组件被贡献进来,并提供了详细的文档和丰富的代码示例,使得开发者可以快速上手并有效地使用这些组件。总的来说,Boost 是 C++ 开发者不可或缺的强大工具箱,能够大大提高开发效率和代码质量。

测试环境

  • Win11 + Vs2015 + Boost1.80

下载

  • 官方地址

  • 最新版下载地址

  • 历史版本下载地址 :其中也提供编译好的二进制库

  • 开源托管平台

  • 中文文档地址:比较旧 boost1.56.0

  • 最新官方文档

  • 这里使用的是Boost1.80这个版本,若有需要请自行下载其他版本。

编译

目录结构

  • 根目录结构
boost_1_80_0\ .......Boost根目录boost\ ...........所有Boost头文件lib\ .............预编译的Boost库二进制文件libs\ ............Boost 库的源代码、文档、测试用例等。index.html .......网页版文档status\ ..........Boost 整体的测试套件tools\ ...........Boost 相关的工具,如 Boost.Build、quickbook、bcp 等more\ ............一些帮助文档doc\ .............库文档
  • 源码目录结构
├── accumulators # 累加器库,提供了一系列统计计算的累加器组件,可以方便地进行数据分析和统计。
├── algorithm # 算法库,提供了丰富的算法组件,包括排序、搜索、变换等常用算法。
├── align # 内存对齐库,提供了内存对齐相关的功能,可以帮助开发者管理和优化内存对齐。
├── any # any 类型库,提供了 any 类型,可以存储任意类型的值。
├── array # 数组库,提供了一个可以替代 C 风格数组的容器。
├── asio # 网络编程库,提供了跨平台的网络编程库,支持 TCP/UDP 等协议。
├── assign # 初始化库,提供了一种简单的方式来初始化 Boost 容器。
├── atomic # 原子操作库,提供了原子操作的支持,用于实现线程安全的代码。
├── beast # HTTP 和 WebSocket 库,提供了 HTTP 和 WebSocket 的实现。
├── bimap # 双向映射库,提供了双向映射容器。
├── bind # 函数绑定库,提供了函数绑定的功能。
├── callable_traits # 函数类型信息库,提供了获取函数类型信息的工具。
├── chrono # 日期时间库,提供了日期时间相关的功能。
├── circular_buffer # 环形缓冲区库,提供了环形缓冲区。
...

直接使用

  • boost库源文件以hpp形式存在,可不需要编译,直接包含hpp文件
  • Boost大部分库都不需要编译,可直接通过包含hpp文件的形式进行使用

手动编译

Boost.Build

在使用 Boost 时,通常需要借助 Boost.Build 来完成编译和链接的过程,Boost.Build 是 Boost 项目中的一个构建系统,它是一个跨平台的、高度可配置的构建工具。Boost.Build 的主要特点如下:

  • 跨平台性: Boost.Build 可以在 Windows、Linux、macOS 等主流操作系统上使用,确保了 Boost 库的跨平台性。

  • 高度可配置性: Boost.Build 提供了丰富的配置选项,开发者可以根据需求自定义构建过程,比如指定编译器、链接器、编译参数等。

  • 自动依赖管理: Boost.Build 能够自动处理 Boost 库之间的依赖关系,简化了构建过程。

  • 模块化设计: Boost.Build 采用了模块化的设计,便于扩展和维护。开发者可以根据需求添加自定义的构建模块。

  • 集成构建: Boost.Build 可以与其他 C/C++ 构建系统(如 CMake、GNU Make 等)集成使用。

编译
  • 解压源码之后可以在源码路径下看到两个脚本文件 bootstrap.bat bootstrap.sh 一个是windows批处理脚本,一个是linux shell脚本
  • 双击 bootstrap.bat 该脚本会自动设置Boost.Build的构建环境,执行完成后当前目录下会出现一个b2.exe的可执行程序。
  • 双击b2.exe等待自动编译完成,编译过程中会生成 bin.v2文件夹存放编译过程中的中间文件,stage文件夹存放库文件。
  • 直接运行 b2.exe 只是执行的默认构建生成静态库,可通过命令行 b2 --help查看帮助。
  • 生成动态库
b2 toolset=msvc threading=multi runtime-link=shared link=shared variant=release
  • 这条命令是 生成使用 MSVC 编译器、支持多线程、动态链接 C/C++ 运行时库、动态链接 Boost 库、发布版本的 Boost 库文件。
  • 说明:
    • toolset=msvc:指定 Microsoft Visual C++ (MSVC) 作为编译器工具集,b2会自动检测本地可用的msvc构建器,我这里是Vs2015就是msvc-14.0,对于有多个工具集可显式的指定如toolset=msvc-14.1 (Vs2017)
    • threading=multi: 支持多线程的库文件,single生成单线程版本的库文件。
    • runtime-link=shared: 链接 C/C++ 运行时库的方式为动态链接 (shared), static链接静态版本的运行时库。
    • link=shared:生成动态链接库 (DLL) 版本的 Boost 库文件,static生成静态库文件。(这里才表示生成静态库)
    • variant=release:生成发布版本 (release) 的库文件,debug生成调试版本的库文件。
  • 更加详细的Boost.Build用法请移步B2 User Manual

参考

  • Boost Getting Started on Windows - 1.80.0
  • Boost的介绍、安装与环境配置

使用

Vs中使用

  • 右键项目 -> 属性 -> C/C++ -> 常规->附加包含目录 ->boost根目录
C:\Program Files\boost\boost_1_80_0

Qt中使用

  • 同样的Qt中也只需要包含Boost路径就能使用Boost库了。
  • 使用INCLUDEPATH添加Boost路径
INCLUDEPATH += E:/boost_1_80_0

CMake中使用

  • 使用include_directories将Boost路径添加到搜索路径中
include_directories("E:/boost_1_80_0")

代码中使用

#include <iostream>
#include "boost/version.hpp"
#include <boost/regex.hpp>
#include <string>int main(int argc, char* argv[])
{std::cout << "boost version:" << BOOST_LIB_VERSION<<std::endl;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;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/791389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTPS RSA 握手解析(计算机网络)

传统的 TLS 握手基本都是使用 RSA 算法来实现密钥交换的&#xff0c;在将 TLS 证书部署服务端时&#xff0c;证书文件其实就是服务端的公钥&#xff0c;会在 TLS 握手阶段传递给客户端&#xff0c;而服务端的私钥则一直留在服务端。 在 RSA 密钥协商算法中&#xff0c;客户端会…

佳能打印机E568扫描书和文件方法

官方网站; Canon : Inkjet 手册 : IJ Scan Utility : 启动IJ Scan Utility 打开打印机电源 扫描一个文件&#xff0c;翻页后盖好盖子。再点击扫描。 所有扫描结束之后点退出 点击保存

easyexcel-获取文件资源和导入导出excel

1、获取本地资源文件&#xff0c;根据模板填充数据导出 public void exportExcel(HttpServletResponse httpResponse, RequestBody AssayReportDayRecordQuery query) {AssayReportDayRecordDTO dto this.queryByDate(query);ExcelWriter excelWriter null;ExcelUtil.config…

【无限列车1】SpringCloudAlibaba 与 SpringBoot后端架构的搭建

【无限列车1】SpringCloudAlibaba 与 SpringBoot后端架构的搭建 1、版本说明二、日志相关配置3、AOP 打印日志4、下载开源前端后台管理系统5、添加网关模块6、集成数据库和mp(1) 添加驱动和mp依赖(2) 数据库配置(3) 使用MybatisPlus 7、加密 yaml 文件中的内容(1) 依赖(2) 敏感…

SVG XML 格式定义图形入门介绍

SVG SVG means Scalable Vector Graphics. SVG 使用 XML 格式定义图形SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失SVG 是万维网联盟的标准 Hello World Use SVG in html and you can see: Link to the SVG file You can use <a> tag to link to the svg…

02---webpack基础用法

01 entry打包的入口文件&#xff1a; 单入口entry是一个字符串:适用于单页面项目module.exports {entry:./src/index.js}多入口entry是一个对象module.exports {entry:{index:./src/index.js,app:./src/app.js}} 02 output打包的出口文件&#xff1a; 单入口配置module.ex…

基于SSM的网络视频播放器

目录 背景 技术简介 系统简介 界面预览 背景 互联网的迅猛发展彻底转变了全球各类组织的管理策略。自20世纪90年代起&#xff0c;中国政府和企业便开始探索利用网络系统进行信息管理。然而&#xff0c;早期的网络覆盖不广泛、用户接受度不高、相关法律法规不完善以及技术开…

git 提交一个pr

为了向一个项目提交一个PR&#xff08;Pull Request&#xff09;&#xff0c;你需要遵循一系列步骤&#xff0c;这通常包括&#xff1a; Fork项目&#xff1a;首先&#xff0c;你需要在GitHub上找到项目&#xff0c;并点击“Fork”按钮。这将会创建项目的一个副本到你的GitHub账…

QT之单例模式

一.概述 1.什么是单例模式 单例模式&#xff08;Singleton Pattern&#xff09;是一种设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供全局访问点以访问该实例。 在应用程序的整个生命周期内&#xff0c;只能创建一个特定类的对象。 单例模式常用于需要…

C#实现只保存2天的日志文件

文章目录 业务需求代码运行效果 欢迎讨论&#xff01; 业务需求 在生产环境中&#xff0c;控制台窗口不便展示出来。 为了在生产环境中&#xff0c;完整记录控制台应用的输出&#xff0c;选择将其输出到文件中。 但是&#xff0c;存储所有输出的话会占用很多空间&#xff0c;…

uniApp使用uview对vuex的二次封装实现全局变量

1、uni-app目根目录新建’/store/index.js’&#xff0c;并复制如下内容到其中 2、uni-app目根目录新建’/store/ u . m i x i n . j s ′ &#xff0c;并复制如下内容到其中&#xff0c;由于 H X 某些版本的限制&#xff0c;我们无法帮您自动引入 " u.mixin.js&#xff0…

element-ui card 组件源码分享

今日简单分享 card 组件源码&#xff0c;主要从以下两个方面&#xff1a; 一、card 组件页面结构 二、card 组件属性 2.1 header 属性&#xff0c;设置 header&#xff0c;也可以通过 slot#header 传入 DOM&#xff0c;类型 string&#xff0c;无默认值。 组件使用部分&#…

【Kotlin】匿名类和伴生类

1 匿名类 1&#xff09;无继承 fun main() {var obj object {var name: String "zhang"override fun toString(): String {return name}}println(obj) // zhang } 2&#xff09;有继承 fun main() {var obj object: People {var name: String "zhang"…

Linux TUN设备实现Tunnel性能分析

一、TUN/TAP设备原理&#xff1a; Linux的TUN/TAP设备是一种可以使得应用层与TCP/IP协议栈交互的驱动模块&#xff0c;通常用于组建虚拟局域网中的点对点隧道&#xff08;Tunnel&#xff09;&#xff0c;可以工作于2层&#xff08;TAP设备&#xff09;和3层&#xff08;TUN设备…

Linux的软链接和硬链接

1、软链接 概念&#xff1a;给文件创建一个快捷方式&#xff0c;依赖原文件&#xff0c;和普通文件没有区别。 特性&#xff1a; 可以给存在的文件或目录创建软链接可以给不存在的文件或目录创建软链接可以跨文件系统创建软链接删除软链接不影响原文件、删除原文件会导致软链…

moment.js 产出未知格式的时间,可能的原因

moment.js 产出未知格式的时间&#xff0c;可能的原因 有个问题困扰我好久了&#xff0c;在项目中使用格式化时间的时候会产出一些千奇百怪的格式&#xff0c;产出的文字我都不认识。 百思不得其解&#xff0c;终于今天在看代码的时候发现了这个问题。 它的表现是这样的&…

kafka与rabbit 介绍,区别,优缺点以及Java配置示例

Apache Kafka 和 RabbitMQ 是两种广泛使用的消息中间件&#xff0c;它们都可以实现高效的消息传递&#xff0c;但它们有着不同的设计理念、使用场景和特性。 Apache Kafka&#xff1a; Apache Kafka 是一个分布式、高吞吐量的发布订阅消息系统&#xff0c;主要应用于大数据实时…

详细介绍如何利用 A star(A*)算法解决8数码问题

文章目录 1. A star(A*)算法简介2. 利用A*解决8数码问题(含Python代码)2.1 什么是8数码问题2.2 A*算法中的开放列表和关闭列表2.3 A*算法解决8数码问题过程2.3.1 计算节点(棋盘顺序)间距离2.3.2 交换数字生成新的节点2.3.3 A*主求解程序1. A star(A*)算法简介 A ∗ A^*…

算法之模拟

前言 模拟算法通俗地来解释就是 "照葫芦画瓢", 通常这类题的题目中就说明了这道题应该怎么做, 要做的就是把题目的意思转化为代码, 这类题的特点是思路比较简单, 考查的是代码能力. 1. 模拟算法流程, 最好在演草纸上过一遍流程, 凭空想象可能会忽略一些细节 2. 把流…

Vue3:组件间通信-$refs和$parent的使用

一、情景说明 我们在之前&#xff0c;学习了Vue3&#xff1a;标签的ref属性用法 我们知道&#xff0c;父组件中&#xff0c;给子组件使用ref标记后&#xff0c;获取到的是&#xff0c;子组件实例。 那么&#xff0c;我们就可以修改子组件实例暴露的变量值。 与之对应的是&…