boost库在visual studio、DevC++和vscode上的环境配置

2023-05-16

目录标题

    • @[TOC](目录标题)
    • 1.boost库简介
      • 1. 获取 Boost
      • 2. Boost 的目录结构
      • 3. Boost 使用方式
    • 2.在DEVC++中配置使用boost库的环境
    • 3.在visual studio中配置boost库使用环境
    • 4.在vscode中使用boost库

1.boost库简介

Boost 是一个功能强大、构造精巧、跨平台、开源并且完全免费的 C++ 程序库。

1998 年,Beman G.Dawes(C++标准委员会成员之一)发起倡议并建立了 Boost 社区,其目的是向 C++ 程序员提供免费的、经同行审查的、可移植的、高质量的 C++ 源程序库。

Boost 强调程序库要与 C++ 标准库很好地共同工作,建立在“既有的实践”之上并提供参考实现,因此 Boost 库可以适合最后的标准化。

自创立以来,Boost 社区的工作已经取得了卓越的成果,C++ 标准库中有三分之二来自 Boost 库,而且将来 Boost 库中还会有更多的库进入新标准。

C++ 四十余年的发展历史中产生了数不清的程序库,有影响力的程序库也不计其数,然而其中没有一个程序库能够与 Boost 相提并论,Boost 有着其他程序库无法比拟的优点,具体如下:

  1. 许多 Boost 库的作者本身就是 C++ 标准委员会成员,因此,Boost“天然”成了标准库的后备,负责向新标准输送组件,这也使得 Boost 获得了“准”标准库的美誉。

  2. Boost 独特的同行审查制度保证了每一个 Boost 库组件都经过了严格的审查和验证,使其具有很高的工业强度,甚至超过大多数商业产品的实现。

  3. Boost 采用了类似 STL 的编程范式,但却并没有 STL 那样晦涩难懂,其代码格式优美清晰、易于阅读,而且 Boost 附带丰富的说明文档——它既是一个程序库,也是一个很有价值的学习现代 C++ 编程的范本。

  4. Boost 的发布采用 Boost Software License,这是一个不同于 GPL 和 Apache 的非常宽松的许可证,该许可证允许库用户将 Boost 用于任何用途,既鼓励非商业用途,也鼓励商业用途。用户无须支付任何费用,不受任何限制,即可轻松享有 Boost 的全部功能。

Boost 官方于 2019 年 12 月发布的 1.72 版本,共包含 160 余个库/组件,涵盖字符串与文本处理、容器、迭代器、算法、图像处理、模板元编程、并发编程等多个领域,使用 Boost,将大大增强 C++ 的功能和表现力。

1. 获取 Boost

Boost 提供源码形式的安装包,可以从 Boost 官方网站(https://www.boost.org/)下载最新版本。以 boost_1_72_0.tar.gz 为例,把该文件解压缩到磁盘任意位置即可,例如:

tar xvfz boost_1_72_0.tar.gz #解压缩到当前目录

2. Boost 的目录结构

Boost 压缩包解压后有5万多个文件,占据近 700MB 的磁盘空间,但其目录结构却很简洁清晰:

boost_1_72_0/  #存放配置脚本和说明文件
├──── boost    #最重要的目录,90%以上的Boost程序库源码都在这里
├──── doc      #HTML格式的文档,也可以生成PDF格式的文档
├──── libs     #所有组件的示例、测试、编译代码和说明文档
├──── more     #库作者的相关文档
├──── status   #可用于测试Boost库的各个组件
└──── tools    #b2、quickbook 等自带工具

在大多数情况下,我们只需要关心 boost 子目录,这里面以头文件的形式分门别类地存放了我们要使用的库代码:

boost_1_72_0/  #Boost 安装根目录
├──── boost    #boost子目录
│    ├──── accumulators #累加器库
│    ├──── algorithm    #算法库
│    ├──── align        #内存对齐库
│    ├──── archive      #序列化库
│    ├──── asio         #异步并发库
│    ├──── assign       #赋值初始化库
│    ├──── atomic       #原子操作库
│    ├──── beast        #高级网络通信库(HTTP/WebSocket)
│    ├──── bimap        #双向关联数组
│    ├──── bind         #bind表达式
│    ├──── chrono       #时间处理库
│    ├──── ...          #其他库……
│    └──── yap          #表达式模板库

3. Boost 使用方式

Boost 库的大多数组件不需要编译链接,我们在自己的源码里直接包含头文件即可。例如,如果要使用 boost::tribool,只需要在 C++ 源文件中添加如下 include 语句:

#include <boost/logic/tribool.hpp> //使用tribool库

细心的读者会发现,Boost 库的头文件与我们平常所用的头文件(*.h)或 C++ 标准库的头文件(没有后缀名)不同,这正是 Boost 的独特之处。它把 C++ 类的声明和实现放在了一个文件中,而不是分成两个文件,即.h+.cpp,故文件的后缀是.hpp

之所以这么做当然是有理由的。其中一个原因就是与普通的C头文件(*.h)区分,另一个很重要的原因就是使 Boost 库不需要预先编译,直接将其引入程序员的工程即可编译链接,方便了 Boost 库的使用。

Java、C#、PHP、Python 程序员应该对这种代码文件形式很熟悉,这几种语言都在一个文件中编写所有代码。

剩下的少量库(如 chrono、date_time、program_options、test、thread 等)必须编译成静态库或动态库,并在构建时指定链接选项才能使用。

不过有个好消息,其中有的库不需要编译也可以使用部分或全部功能,而更好的消息是有的库已经有了不需要编译的替代品。


2.在DEVC++中配置使用boost库的环境

在编译器选项中:
在这里插入图片描述

在目录-C++包含文件中,设置boost库的地址,注意是里面boost目录的上层地址。

这个设置的是包含文件,可以认为是头文件,此外我们可能还需要用到静态库,因此我们还需要设置一下静态库文件路径。

image-20210703101638632

通过上面两步,我们就设置好了在DEVC++下的使用环境。

下面我们来测试一下

#include <boost/lexical_cast.hpp>       
#include <iostream>

using namespace std;

int main()  
{  
    using boost::lexical_cast;  
    int a = lexical_cast<int>("123");  
    double b = lexical_cast<double>("123.0123456789");  
    string s0 = lexical_cast<string>(a);  
    string s1 = lexical_cast<string>(b);  
    cout << "number: " << a << "  " << b << endl;  
    cout << "string: " << s0 << "  " << s1 << endl;  
    int c = 0;  
    try{  
        c = lexical_cast<int>("abcd");  
    }  
    catch (boost::bad_lexical_cast& e){  
        cout << e.what() << endl;
    }

    return 0;
}

image-20210703102408130

可以看到能够正常使用了!


3.在visual studio中配置boost库使用环境

新建一个项目之后,设置一下包含目录

image-20210703103851790

再设置一下包含库目录

image-20210703104217173

继续用上面的代码进行测试

#include <boost/lexical_cast.hpp>       
#include <iostream>

using namespace std;

int main()
{
    using boost::lexical_cast;
    int a = lexical_cast<int>("123");
    double b = lexical_cast<double>("123.0123456789");
    string s0 = lexical_cast<string>(a);
    string s1 = lexical_cast<string>(b);
    cout << "number: " << a << "  " << b << endl;
    cout << "string: " << s0 << "  " << s1 << endl;
    int c = 0;
    try {
        c = lexical_cast<int>("abcd");
    }
    catch (boost::bad_lexical_cast& e) {
        cout << e.what() << endl;
    }
    return 0;
}

注意这边要设置成64位,因为编译的静态库和动态链接是64位。

image-20210703104325458

点击运行

在这里插入图片描述

既可以看到下面的输出结果,可以看出环境已经配置成功了

image-20210703104110930


4.在vscode中使用boost库

现在有很多小伙伴不用臃肿的IDE而改用vscode来写代码了。

vscode配置C/C++的环境可以看我这篇文章:vscode配置C/C++编译环境

本来应该是在这里面配置包含目录的,但是不知道为啥一直报错fatal error: boost/config.hpp: No such file or directory

"includePath": [
                "${workspaceFolder}/**",
                "E:/wenjian/cs/code/boost_1_76_0_2/boost_1_76_0/"
            ]

所以,没办法,我把boost目录拷贝到D:\MinGW\include,即gcc编译器的标准包含文件中,发现是可以正常运行的。

image-20210703152732456

image-20210703152809357

运行生成任务成功

在终端上键入 ./main.exe,输出

PS E:\wenjian\cs\code\boost_1_76_0_2\boost_1_76_0> ./main.exe
number: 123  123.012
string: 123  123.0123456789
bad lexical cast: source type value could not be interpreted as target

大功告成,总算能用了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

boost库在visual studio、DevC++和vscode上的环境配置 的相关文章

  • 在生产者-消费者情况下使用条件变量

    我正在尝试了解条件变量以及如何在生产者 消费者情况下使用它 我有一个队列 其中一个线程将数字推入队列 而另一个线程从队列中弹出数字 当生产线程放置一些数据时 我想使用条件变量向消费线程发出信号 问题是有时 或大多数时候 它只将最多两个项目推
  • 如何通过 Cmake 查找 iOS/mac OS X 框架

    Context 我通过此将 Boost C 库打包到一个框架 适用于 iOS 中script https github com davidandreoletti boostoniphone generic 该脚本产生boost框架 当链接到
  • 什么是 boost::asio::ssl::context::load_verify_file 以及如何使用它?

    有一个谨慎的小量 boost asio ssl http en wikipedia org wiki Transport Layer Security小型 C 在线教育代码库 甚至更少boost asio ssl context load
  • Boost Python:多态容器?

    我有一个方法 或函数 它返回对多态对象列表的引用 class A class B public A std list
  • Boost 测试与 Google 测试框架

    我是单元测试世界的新手 基本上我是 C 开发人员 在一个大型产品上工作了近 3 年 现在我决定对我的代码执行自动化单元测试 为此 我在互联网上做了很多研究 遇到了很多工具和框架 最终选择了以下两个 1 Boost测试库 2 Google C
  • Boost:如何创建一个线程以便可以控制它的所有标准输出、标准错误?

    我用 C 创建了一个 win32 控制台应用程序 我使用一些API 不是我的 我不能修改它的来源 它是这样写的 它会将一些信息写入控制台屏幕 而不询问 每次我调用它时 每秒 48 次 所以我想将它放入某个线程并限制其输出能力 但我需要得到当
  • 未找到 Boost 库,但编译正常

    我正在尝试在 C 中使用 boost 的文件系统 使用时看起来编译没问题 c c Analyse c o Analyse o g W Wall L usr local lib lboost filesystem lboost system
  • 如何将 Boost Spirit 自动规则与 AST 结合使用?

    编辑 当我想在另一个规则上使用它时 我扩展了 sehe 的示例以显示问题 http liveworkspace org code 22lxL7 http liveworkspace org code 22lxL7 17 我正在尝试提高 Bo
  • CMake 找不到请求的 Boost 库

    既然我已经浏览了其他人的解决方案几个小时 但找不到适合我的问题的正确答案 我想将我的具体问题带给您 我正在尝试使用 CMake 构建 vsomeip 为此 我之前构建了 boost 1 55 但是 我在 CMake 中收到以下错误 The
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • boost::detail::spinlock_pool 中的错误共享?

    我遇到了这个SOquestion https stackoverflow com questions 8007186 read write thread safe smart pointer in c x86 64读完它最终让我看到boos
  • 使用 gtest 模拟 boost 共享内存派生类

    我有一个简单的 CPP 类 存储项目的一些配置 此类使用 boost 进程间共享内存进行存储 因此可以从我的服务器上运行的不同进程进行访问 现在 我想对我的程序运行一些测试 所以我想模拟我的共享内存对象的功能 为了使用 gtest 做到这一
  • 使用 boost::asio 是否有一种可移植的方法来查找空闲端口号

    我目前正在尝试找出一种方法来查找空闲端口号以建立连接 最好使用 boost asio 然后 该端口号将用于侦听 只有这样我才能打开套接字 大致来说 有没有办法做到 tcp resolver query query localhost por
  • 使用 boost 和 Visual C++ 2005 解压缩 zip 文件?

    boost中有没有可以用来解压zip文件的库 boost iostreams http www boost org doc libs 1 41 0 libs iostreams doc index html has a gzip http
  • 语言混合:模型和视图

    考虑开发一个应用程序 其中模型将使用 C 使用 Boost 编写 视图将使用 Objective C 使用 Cocoa Touch 编写 哪里有一些示例展示了如何集成 C 和 Objective C 来开发 iPhone 应用程序 直接从源
  • Boost 安装在我的 Ubuntu 上的什么位置?

    我从 Boost 网站下载 Boost 1 54 tar 然后按照此处 1 详细说明进行操作 特别是 我想将我的 boost 库安装在文件夹中 HOME BOOST 使用这个 bootstrap sh prefix HOME BOOST 但
  • “boost does it”在多大程度上等同于“非常便携,用它”?

    In 这个答案 https stackoverflow com questions 2333321 most portable and reliable way to get the address of variable in c 233
  • 在 C++ 中运行 python [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个用 C 编写的应用程序和一个测试系统 也是用 C 编写的 测试系统非常复杂并且很难改变 我只想做一些小的改变 我的班级是这样的
  • 如何使用Boost.Asio C++? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我会尝试使用该库在多个平台上使用套接字 Boost Asio c 我在这里下载了最新版本 http sourceforge net p
  • 使用 C++ 和 BOOST 读取 JSON 文件

    HTTP 服务器向我发送一个 JSON 响应 字符串 如下所示 folders id 109 parent id 110 path 1 105 110 id 110 parent id 105 path 1 105 files id 26

随机推荐

  • ros自定义全局路径规划器并内置到ros工作空间

    ros自定义全局路径规划器并内置到ros工作空间 1 定义头文件2 类实现3 写好自己的cMakelist txt文件4 为我们的规划器写一个描述文件5 修改package xml文件6 运行catkin make进行编译 xff0c 如果
  • 从RRT到RRT*,再到Informed RRT*,路径规划算法怎么写

    从RRT到RRT xff0c 再到Informed RRT xff0c 路径规划算法怎么写 1 RRT算法1 1 假设1 2 RRT算法步骤与实现1 3 伪代码 2 RRT 算法3 Informed RRT 算法 做个正直的人 RRT中文名
  • VFH避障/局部路径规划算法

    VFH避障 局部路径规划算法 1 信度栅格 xff08 Certainty Grid xff09 2 势场法 xff08 Potential Field Methods xff09 3 VFH算法的前身 VFF xff08 Virtual
  • VFH+避障/局部路径规划算法

    VFH 43 避障 局部路径规划算法 1 第一部分 xff1a 映射到极坐标系VFH 43 对VFH的改进 考虑机器人的宽度 amp 对障碍物进行膨胀 2 第二部分 xff1a 二值化极坐标直方图VFH 43 算法对此提出了一种解决办法 二
  • 给树莓派刷入OpenWrt

    下载OpenWrt固件 进入OpenWrt官网 xff0c 进入固件列表 在选择框输入raspberry搜索树莓派的固件资源 xff0c 选择对应树莓派型号的下载链接 以3B 43 为例 xff0c 注意不支持一栏的提示 xff0c 可能产
  • VFH*避障/局部路径规划算法

    VFH 避障 局部路径规划算法 1 VFH 43 存在的问题 dead end2 VFH 算法2 1 VFH 算法概述2 1 1 VFH 的参数2 2 2 表示2 2 3 算法步骤 2 2 投影位置和方向2 3 代价函数2 3 1 k e
  • 新建ROS订阅者、发布者节点方法

    文章目录 1 新建一个该项目的工作空间 xff0c 并在其中创建一个文件夹src2 进入src文件夹 xff0c 并在其中创建一个package xff0c 运行如下命令即可3 返回上一层 xff0c 编译 xff0c 并source4 编
  • 基于光线跟踪的路径规划算法

    基于光线跟踪的路径规划算法 光线跟踪算法是我在 中国控制会议2022 上提出的一种全新的路径规划算法 这里附上论文链接 不自夸 xff0c 感兴趣的欢迎去阅读 xff0c 实现非常简单
  • ubuntu 20.04 配置cartographer 库

    ubuntu 20 04 配置cartographer 库 不要让别人占据你的大脑 一 安装Ceres 库1 安装依赖项2 下载源码3 编译源码4 安装 二 安装cartographer1 安装工具 xff1a wstool rosdep
  • 终于把前后端sm加解密以及加签验证调通了。

    终于把前后端sm加解密以及加签验证调通了 xff01 领导要求我对项目的数据传输安全考虑下 xff0c 因此就想到了对敏感字段做加密和对请求 响应做数字签名验证 网上看了很多文章 xff0c 可能是因为我对加密这块不了解 xff0c 感觉都
  • 【LeetCode】最接近原点的K个点 (优先队列PriorityQueue,快速排序的根据基准数分区思想(双指针法分区))

    LeetCode 最接近原点的K个点 xff08 优先队列PriorityQueue xff0c 快速排序根据基准数分区思想 双指针法分区 xff09 题目 xff1a 我们有一个由平面上的点组成的列表 points 需要从中找出 K 个距
  • 萌新解析正点原子悟空大四轴无人机ATKflight固件(持续更新中~)

    本博客用来记录学习ATKflight固件的学习过程 xff0c 本人萌新 xff0c 大佬们可以参考参考 本文默认已经了解FreeRTOS操作系统并且会简单的使用方法 xff0c 如果读者没了解过 xff0c 建议先看正点原子的FreeRT
  • FOC观测器之龙伯格观测器

    状态观测器 xff1a 根据控制理论 xff0c 如果一个系统能够完全通过其检测到的输出值来重构其系统状态 xff0c 则认为该系统是可观测的 其作用于无传感器转子的位置和速度的检测反馈 xff0c 再作用到PARK逆变换和转矩磁链控制上
  • VxWorks实时性能探究

    VxWorks实时性能探究 笔者最近在使用VxWorks操作系统 xff0c 由大名鼎鼎的风河 xff08 WindRiver xff09 开发 VxWorks操作系统是一款硬实时操作系统 xff0c 一直听闻其实时性能非常优秀 xff0c
  • VxWorks中的任务和进程线程的关系

    学过操作系统的 xff0c 对进程和线程应该是比较了解的 但是为了文章知识的完整性 xff0c 笔者先对操作系统中的进程和线程进行一些介绍 1 进程和线程的关系 为了不产生歧义 xff0c 先对一些易混淆的概念进行介绍 xff1a 代码 x
  • 优启通系统U盘制作及Win10系统安装

    前言 自己手动安装操作系统的方法总结 准备工作 一 xff1a Win10系统下载 MSDN 二 xff1a 利用PanDownload下载工具快速下载系统文件到本地 1 PanDownload下载安装 2 使用Pandownload新建离
  • FreeRTOS学习教程整理

    这篇博客主要用来整理一下FreeRTOS的主要学习资料 xff0c 方便以后学习查阅 首先当然是官网了 xff1a FreeRTOS 官网上有很多系统的资料 xff0c 还可以下载源码 不习惯英文的可以看这个中文教程 xff1a 中文教程环
  • Linux新手必须知道的配置知识(apt、pip、环境变量设置、更换安装源和pip镜像源)

    对于刚接触Linux的同学来说 xff0c 如果能过先对这些知识很熟悉的话 xff0c 那么对于在Linux上的环境配置你就会很熟悉了 一 apt 命令 apt 命令是一个功能强大的Linux命令行工具 xff0c 它不仅可以更新软件包列表
  • vscode配置C/C++编译环境

    这边记录一下配置vscodeC C 43 43 编译环境的过程 xff0c 以便以后要配置的时候可以直接参考 插件安装参考博文 xff1a VSCode配置C C 43 43 环境和Windows下VSCode配置C 43 43 环境 2
  • boost库在visual studio、DevC++和vscode上的环境配置

    目录标题 64 TOC 目录标题 1 boost库简介1 获取 Boost2 Boost 的目录结构3 Boost 使用方式 2 在DEVC 43 43 中配置使用boost库的环境3 在visual studio中配置boost库使用环境