Boost的介绍、安装与环境配置

news2024/12/26 20:47:33

文章目录

  • 一、Boost库简介
  • 二、Boost的安装与编译
    • (一)下载解压
    • (二)编译静态库
  • 三、配置VS环境
  • 四、其它环境的配置(vscode、DevC++)
    • (一)在DEVC++中配置使用boost库的环境
    • (二)在vscode中使用boost库
  • 五、Linux下boost库安装过程
  • 附录:测试代码


一、Boost库简介

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

Boost库是一款高效的C++跨平台开发库。Boost库官方版提供了丰富的模板类和函数接口,并实现了诸如智能指针、容器、算法等常用功能。Boost库还支持多种操作系统和编译器环境,并提供了详细文档和示例代码以便用户进行快速学习和上手使用

它使得C++编程更优雅、更有活力、更高产,C++11的标准有三分之二来自boost库。Boost 程序库可以与C++标准库很好地共同工作,因此Boost库可以适合最后的标准化。

二、Boost的安装与编译

(一)下载解压

官网地址:

http://www.boost.org/

在这里插入图片描述

在这里插入图片描述

用官网的话可能下载不了,因为国内限制访问不了,咱搞这些的基本上都这样,可以用下面这个:

Boost C++ Library - 在 SourceForge.net 浏览 /boost-binaries

为了稳定,我就没选最新版的

在这里插入图片描述

在这里插入图片描述

下载后解压到自己喜欢的路径就行了

解压后可以看到整体一个结构:

最上层结构

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

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

├── accumulators          # 累加器库
├── algorithm             # 算法库
├── align                 # 内存对齐库
├── archive               # 序列化库
├── asio                  # 异步并发库
├── assert                # 断言库
├── assign                # 赋值初始化库
├── atomic                # 原子操作库
├── beast				  # 高级网络通信库
├── bimap                 # 双向关联数组
├── bind                  # bind表达式
├── chrono                # 时间处理库
...						  # 其他库
├── python                # python库   (把C++类和函数映射到Python之中)
├── yap                   # 表达式模板库
...

(二)编译静态库

boost库的大多数组件不需要编译链接,我们在自己的源码里面直接包含头文件即可,如,如果使用boost::timer,只需要写以下的语句即可(在ide环境中要先配置下环境,在第三步中会提到)

#include <boost/timer.hpp>
using namespace boost

1.Boost库的头文件与我们平常所用的头文件(*.h)或C++标准库的头文件(没有后缀名)不同,这正是Boost的独特之处。它把C++类的声明和实现放在了一个文件中,而不是分成两个文件,即.h+.cpp,故文件的后缀是.hpp。
 
2.这里需要说明一下,刚开始拿到压缩包解压后,想着能够像GDAL库一样,直接拷贝到工程目录下进行包含引用。然而发现引用进去文件报错不能打开。 所以boost库不能直接拷贝进去使用,对于有些文件还是需要编译一下静态库进而引用的。这里的编译与GDAL和OpenCV的安装有一定的区别,这里的编译安装,只是在对应的文件下生成静态库。

第一步:下载解压完成后有个bootstrap.bat文件,双击执行,会生成一个b2.exe文件;不行的话进到cmd里面,然后进到这个目录下输入bootstrap.bat运行也可以:

在这里插入图片描述

第二步:双击b2.exe运行:等待程序编译完成,会在目录下生成bin.v2和stage两个文件夹,其中bin.v2下是生成的中间文件,大小在2.4G左右,可以直接删除。stage下才是生成的lib文件。文件如下:

在这里插入图片描述

说明:

这里通过双击b2.exe进行编译的,默认在stage下生成lib文件夹,里面只包含着静态库。如果想要生成dll动态库,可./b2 --help查看参数说明,然后需要输入相应的编译命令如:

./b2 toolset=msvc-14.1 link=static runtime-link=shared threading=multi variant=debug

其中

  • toolset:指定编译器,可选的如minGW、msvc等。

    vs2008 : msvc-9.0,

    vs2010 : msvc-10.0,

    VS2012、VS2013:msvc-12.0

    vs2017 : msvc-14.1,

    vs2015 : msvc-14.0,

    linux :gcc

  • link:生成动态链接库/静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用static方式。一般boost库可能都是以static方式编译,因为最终发布程序带着boost的dll感觉会比较累赘。

  • runtime-link:动态/静态链接运行时库。同样有shared和static两种方式,标记如何连接C++运行库,是包含就用静态,使用系统运行库就用动态。

  • threading:单/多线程编译。一般都写多线程程序,当然要指定multi方式了;如果需要编写单线程程序,那么还需要编译单线程库,可以使用single方式。

  • variant:编译debug/release版本。一般都是程序的debug版本对应库的debug版本,所以两个都编译。

所以如果需要生成dll,可以使用link=shared方式生成。参考Boost编译与使用 - 知乎

生成文件命名说明:

  • 以“lib”开头的是“link=static”版本(静态链接库版本,没有dll),而直接以“boost”开头的是“link=shared”版本(动态链接库版本,包含lib和dll)。
  • 所有的库都含有"boost"前缀。
  • 紧随其后的是boost库名称(比如date_time库)。
  • 然后是编译器的版本,与库名称之间以"-“而不是下划线”_"分隔(比如 -vc120)。
  • 有“mt”的为“threading=multi”版本,没有的则是“threading=single”版本。
  • 有“s”的为“runtime-link=static”版本,没有的则是“runtime-link=shared”版本。
  • 有“gd”的为debug版本,没有的则是release版本。
  • 所有的库都含有boost库的版本号结尾(比如1_56,其中的".“以下划线”_"代替)

三、配置VS环境

1、项目 (右键) --> 属性

2、点击VC++目录:

  • 包含目录:添加自己boost的目录,例:E:\Mingw\boost_1_78_0
  • 库目录:添加自己boost编译后stage下的静态库,例:E:\Mingw\boost_1_78_0\stage\lib

3、点击链接器 --> 常规 --> 附加库目录:同样添加静态库目录,例:E:\Mingw\boost_1_78_0\stage\lib

4、完成,测试,测试代码放在最后

在这里插入图片描述

包含目录:

在这里插入图片描述

库目录:

在这里插入图片描述

在这里插入图片描述

链接器 --> 附加库目录:

在这里插入图片描述

四、其它环境的配置(vscode、DevC++)

(一)在DEVC++中配置使用boost库的环境

在编译器选项中:

在这里插入图片描述

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

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

image-20210703101638632

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

(二)在vscode中使用boost库

本来应该是在这里面配置包含目录的,但是不知道为啥一直报错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

运行生成任务成功

五、Linux下boost库安装过程

一、下载最新的 boost 库

二、在适当的位置解压 boost 库,推荐把 boost 库解压到 /usr/local/ 下: (安装发现没拷贝到这目录是不行的)

三、在Boost解压缩后的目录下直接执行以下命令:./bootstrap.sh;再执行./b2 install

第一条命令 bootstrap.sh 是编译前的配置工作,第二条命令才开始真正地编译并安装Boost。
如果像上面这样不指定额外选项,Boost将编译release版本的库文件,把头文件安装到“/usr/local/include”中,把库文件安装到“/usr/local/lib”中。

四、可以加参数指定我们的编译操作

  • 完全编译:./bootstrap --buildtype=complete install

  • 定制编译:

    ./b2 --show-libraries:可查看所有必须编译后才能使用的库。

    ./b2 --with-date_time --buildtype=complete install:在完全编译命令的基础上,使用–with或–without选项可打开或关闭某个库的编译,执行上述命令将编译安装date_time库

    完整编译Boost费时费力,而且在开发过程中这些库并不会全部用到,因此,Boost允许用户自行选择用户要编译的库。

五、编译验证:同样参考附录代码

附录:测试代码

#include <iostream>
#include <boost/version.hpp>
#include <boost/config.hpp>
 
using namespace std;
int main()
{
	cout<<BOOST_VERSION<<endl;
	cout<<BOOST_LIB_VERSION<<endl;
	cout<<BOOST_PLATFORM<<endl;
	cout<<BOOST_COMPILER<<endl;
	cout<<BOOST_STDLIB<<endl;
	getchar();
	return 0;
}

在这里插入图片描述

头文件<boost/version.hpp>里面有两个宏,定义了当前使用的boost程序的版本号

头文件<boost/config.hpp>中有三个BOOST_STDLIBBOOST_PLATFORMBOOST_COMPILER,分别定义了当前操作系统、编译器和标准库

#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
 
#include <boost/timer.hpp>
#include <boost/progress.hpp>
 
#include <libs/date_time/src/gregorian/greg_names.hpp>
#include <libs/date_time/src/gregorian/greg_month.cpp>
#include <libs/date_time/src/gregorian/gregorian_types.cpp>
 
#include <boost/date_time/posix_time/posix_time.hpp>
 
using namespace boost;
 
int main()
{
	boost::timer t;
 
	boost::progress_display pd(100);
 
	for (int i = 0; i < 100; ++i) //进度条
	{
		++pd;
	}
 
	boost::gregorian::date dt(2009, 12, 8); //date_time 库
	assert(dt.year() == 2009);
	assert(dt.day() == 8);
	boost::gregorian::date::ymd_type ymd = dt.year_month_day();
	std::cout<<"\n"<<ymd.year<<"/"<<ymd.month<<"/"<<ymd.day<<" the day is "
		<<dt.day_of_year() <<" days of this year"<< std::endl;
 
	std::cout << boost::gregorian::to_iso_extended_string(dt) << std::endl; //转换为其他格式
	std::cout << boost::gregorian::to_iso_string(dt) << std::endl;
	std::cout << boost::gregorian::to_simple_string(dt) << std::endl<<std::endl;
 
	//对数组排序操作
	std::vector<int> test_vc(100);
	std::vector<int>::iterator beg_it = test_vc.begin();
	std::vector<int>::iterator end_it = test_vc.end();
	std::srand(std::time(NULL));
 
	std::for_each(beg_it, end_it, [](int& n){n = rand(); });
	std::copy(beg_it, end_it, std::ostream_iterator<int>(std::cout, " "));
	std::cout << std::endl << std::endl;
	std::sort(beg_it, end_it, std::greater<int>());
	std::copy(beg_it, end_it, std::ostream_iterator<int>(std::cout, " "));
	std::cout << std::endl<<std::endl;
 
	boost::posix_time::ptime pt(boost::gregorian::date(2005, 2, 6));
 
	std::cout << t.elapsed() << "s" << std::endl; //程序运行时间
 
	system("pause");
 
	return 0;
}

在这里插入图片描述


尊重原创,参考文章:

Windows下Boost库的安装与使用

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

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

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

相关文章

java: 程序包javax.servlet.http不存在

问题描述 当项目从2.7.x的springboot升级到3.0.x的时候&#xff0c;遇到一个问题“java: 程序包javax.servlet.http不存在” 。这可能是一些包的精简变化导致的。错误信息如下&#xff1a; 错误代码段 package com.softdev.system.generator.config;import com.softdev.system…

深度学习-ubuntu18.04+RTX3080+cuda11.2+cudnn8.1.0下安装polarstream全纪录

&#xff11;、安装 创建一个python3.7的虚拟环境 conda create --name polarstream python3.7 激活虚拟环境 source activate polarstream以下操作均在虚拟环境中进行 安装与cuda和python版本对应的torch版本,参考https://blog.csdn.net/didadifish/article/details/12748…

【软件设计师暴击考点】操作系统知识高频考点暴击系列【二】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件…

栈的应用——括号匹配、表达式求值、递归

目录 一、栈在括号匹配中的应用逻辑实现代码实现 二、栈在表达式求值中的应用手算实现代码实现 三、栈在递归中的应用逻辑实现代码实现 一、栈在括号匹配中的应用 括号匹配&#xff0c;顾名思义。若括号按照正确的格式嵌套&#xff0c;则可正确匹配&#xff0c;例如([])&#…

scratch lenet(12): LeNet-5输出层和损失函数的计算

文章目录 1. 目的2. 输出层结构2.1 Gaussian Connection2.2 Gaussian Connection 的 weight 可视化 3. Loss Function3.1 当前类别判断错误时&#xff0c;loss function 中的项&#xff08;基本项&#xff09;3.2 判断为其他类别时&#xff0c; loss function 中的项&#xff0…

Spring发展历程及其体系结构

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;Spring 目录 发展历程体系结构 发展历程 体系结构 Spring框架的体系结构的主要组成部分&#xff1a; 核心容器…

idea如何集成Tomcat

&#xff08;1&#xff09;、这里应该找Add Configuration点击这里&#xff1a;如果没有标志&#xff0c;点击Exit (2)、这里可以配置一个配置项&#xff1a; &#xff08;3&#xff09;、loacl是本地&#xff0c;那个是远程&#xff1a;这里我选择本地 &#xff08;4&#xff…

代码随想录算法训练营第四十二天 | 01背包理论基础,01背包理论基础(滚动数组),416. 分割等和子集

代码随想录算法训练营第四十二天 | 01背包理论基础&#xff0c;01背包理论基础&#xff08;滚动数组&#xff09;&#xff0c;416. 分割等和子集 1.1 01背包理论基础 01背包 回溯法&#xff1a;暴力的解法是o(2^n)指数级别的时间复杂度&#xff0c;需要动态规划的解法来进行优…

如果你曾经拥有python,那么现在你应该拥抱Julia吗?

看完本文&#xff0c;您就会有较成熟的想法。 Julia和Python的区别是什么&#xff1f;为什么Julia适合用于大规模计算和超级计算机模拟&#xff1f; 你一定听说过Julia和Python这两个编程语言。虽然它们都可以用于从简单的机器学习应用程序到巨大的超级计算机模拟的所有方面&am…

Gradio的Audio组件介绍

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

ImGUI项目建立(cmake+MinGW64)

Dear ImGUI ImGui是一个轻量级的C图形界面库&#xff0c;它可以用于创建各种交互式的工具和编辑器。具有跨平台、高性能的特点。 ImGUI自身不能创建窗口&#xff0c;需要使用Win32API或glfw或SDL等工具来创建窗口&#xff0c;另外需要使用OpenGL或DirectX、vulkan用于渲染图形…

excel数据的编排与整理——表格结构的整理(一)

excel数据的编排与整理——表格结构的整理(一) 1 快速移动一列数据到指定位置 1.1 移动到相邻行 1.1.1 题目内容 1.1.2 选中年龄列➡移动到左侧直到出现十字箭头 1.1.3 按下shift键和左键➡移动到指定位置,直到出现"T"字形 1.1.4 松开鼠标左键后,移动就完成了 1.2…

Debian 12中安装Rstudio

1.Debian 12中安装R 打开终端&#xff0c;执行命令&#xff1a;#apt search r-base (注&#xff1a;此图为安装r-base后再来截图的)&#xff0c;Debian 12官方源中默认为r-base 4.2.2,如果想安装最新版&#xff08;当前最新版为R-4.3.0&#xff09;,可参考上次写的博文“Debi…

thinkphp 反序列化漏洞

文章目录 配置xdebug反序列化漏洞利用链详细分析poc1&#xff08;任意文件删除&#xff09;poc2&#xff08;任意命令执行&#xff09; 补充代码 配置xdebug php.ini [Xdebug] zend_extensionD:/phpstudy_pro/Extensions/php/php7.3.4nts/ext/php_xdebug.dll xdebug.modedebu…

Windows系统下安装Hadoop

文章目录 安装步骤环境验证 前面我们已经讲过了在 Linux下安装配置Hadoop环境&#xff0c;还没看过的可以先去了解一下安装流程。今天我们来看一下如何在Window下安装Hadoop&#xff0c;这其实和在Linux下的安装都是大同小异的。下面我们具体来看一下安装步骤。 安装步骤 首先…

pytorch安装教程(Ubuntu22.04.1,Anaconda3-2023.03)

本文主要讲述了在Linux系统中&#xff0c;通过anaconda安装pytorch的具体步骤&#xff0c;即需要在Ubuntu已经安装好anaconda&#xff0c;其安装步骤可以参考此篇博客&#xff1a;Ubuntu安装Anaconda详细步骤&#xff08;Ubuntu22.04.1&#xff0c;Anaconda3-2023.03&#xff0…

数据结构期末总结

数据结构绪论 数据结构的概念 数据结构 &#xff1a; 数据结构是相互之间存在一种或多种特定关系的数据元素的集合数据结构研究的问题 &#xff1a;数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科抽象数据类型ADT&#xff1a…

JWT漏洞

JWT介绍 1.1 JWT概念 JSON Web Token(JWT) 是一个开放标准。它定义了一种紧凑而独立的方法&#xff0c;用于在各方之间安全地将信息作为JSON对象传输。由于此信息是经过数字签名的&#xff0c;因此可以被验证和信任。可以使用secret&#xff08;HMAC算法&#xff09;或使用“…

SwinTransformer细节总结

SwinTransformer可以看成是披着ResNet外壳的vision transformer&#xff0c;swin 就是两个关键词&#xff1a;patch 多尺度。下面结合code来说一些重点的细节&#xff1a; 总览图 这里W-MSA缩写是window-multi head self attention&#xff0c;SW-MSA缩写是shifted window-mu…

JDK 8到JDK 17都有哪些吸引人的特性?

从JDK 8到JDK 17&#xff0c;Java语言和平台经历了许多变化和改进&#xff0c;引入了许多吸引人的新特性和功能。在这里&#xff0c;给大家列举一些我认为最有趣或最有用的新特性&#xff0c;并会以实际使用案例为大家展示新用法。希望大家多多点赞关注&#xff01;&#xff01…