windows环境cmake引用boost库

news2024/11/24 12:34:18

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、下载源代码
  • 二、编译前准备
    • 1.操作系统
    • 2.gcc环境
    • 3.建立安装目录
  • 三、开始编译
    • 1.解压源代码
    • 2.开始编译
  • 四、开始使用
    • 1.Clion创建项目
    • 2.Boost版本差异
    • 3.Boost版本适配
  • 总结


前言

Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称。
Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。

boost库在linux环境的使用很简单,特别是ubuntu和cenntos这种分发版,软件仓库有专门的deb或rpm包,这里linux环境我们只提一句,不细讲了。


一、下载源代码

直接到官方网站去下载源代码就行了,选择你需要的版本即可。
Boost官网
这个需要点击Download找到需要的版本,官网不仅有Boost的源代码,还有Document和Example可以参考。如果你不想麻烦去找,下面给一个版本集合,选择合适的即可。
版本集合
在这里插入图片描述
选择需要的版本,比如1.71.0(Ubuntu-20.04的默认版本)
在这里插入图片描述

点source进去,找到zip或tar都行,建议windows环境下载zip最佳。
在这里插入图片描述

.json里面是验证串,你首先必须保证下载下来的zip是完整的。

二、编译前准备

这里我们的方式是通过gcc编译,然后通过cmake直接引用;还有一种方法是Virtual Studio 引用(不是这篇文章讲的),由于两种方法差别比较大,所以我只说我的环境。

1.操作系统

我使用的是Windows11,理论上Windows10也是可以的,但是我手上没有Win10环境,希望大家自行测试。Windows7应该也可以,不过身边完全找不到Win7环境了,我也不想装虚拟机什么的,希望大家最大限度和我的环境保持一致吧。

2.gcc环境

我安装的Clion-2022.2.4环境里面自带这个工具链,大家可以效仿我安装Clion,然后配置下环境变量就行了。当然自己安装环境也是可以的,mingw和cygwin都行;这里就不说怎么安装了,不会的搜索下就行了。
下面是我的环境截图:
在这里插入图片描述
这个是安装Clion内置的mingw环境,只需要配置个环境变量就行了。
在这里插入图片描述

3.建立安装目录

最好提前准备个目标目录,用来存放编译好的库。
D:\Work\C++_libs\boost_1_71_0\boost_build

三、开始编译

1.解压源代码

解压源代码到一个不小于5G的存储空间用来存放编译产生的中间文件。这里以1.71.0版本为例:
在这里插入图片描述
这是没编译前的目录结构,打开一个命令行进入到这个目录。我使用的是Terminal,你可以使用PowerShell,但我不保证CMD也行。

2.开始编译

先进到Boost的根目录(上面展示的那个),依次执行下面的命令:

cd ./tools/build
./bootstrap.bat
#等待执行完成

如果没有报错的话(一般不会报错),目录下会生成一个b2.exe程序,官方的说法是加入到环境变量里面去,这里我们不加环境变量,直接使用全路径导航。
记得上面我定义的安装目录吗?D:\Work\C++_libs\boost_1_71_0\boost_build,这个是我的目录,你需要自己创建一个目录,最好不要有空格
这个时候你退到Boost的根目录(不是tools/build),完成之后执行下面的命令:

#--prefix=<你的安装目录>
.\tools\build\b2.exe --prefix=D:\Work\C++_libs\boost_1_65_1\boost_build toolset=gcc install

很好,编译需要十来分钟吧,主要取决于你的配置

四、开始使用

如果一切顺利(我基本没报过错),你的库就被安装到指定的目录了。你的目录结构大致相当于下面的结构:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我这里用的静态库,你也可以编译动态库,根据个人喜好吧。这都不是重点,重点是怎么在Clion里面引用Boost。这个跟在Ubuntu里面引用有一些差别,准确来说没有Ubuntu直接安装的方便。

1.Clion创建项目

必须使用C++11以上的版本,这里就用C++11吧。请看下面的配置:

cmake_minimum_required(VERSION 3.23)
project(Class28)

set(CMAKE_CXX_STANDARD 11)
set(BOOST_ROOT "D:\\Work\\C++_libs\\boost_1_71_0")    # 指定Boost库的根目录
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_ARCHITECTURE "-x64")    # 指定库架构为x64
find_package(Boost COMPONENTS atomic REQUIRED)    # 查找Boost库

include_directories(${Boost_INCLUDE_DIRS})    # 包含Boost库的头文件目录

MESSAGE(STATUS "Boost_INCLUDE_DIRS = ${Boost_INCLUDE_DIRS}")
MESSAGE(STATUS "Boost_LIBRARIES = ${Boost_LIBRARIES}")
MESSAGE(STATUS "Boost_LIB_VERSION = ${Boost_LIB_VERSION}")

add_executable(Class28 main.cpp)
target_link_libraries(Class28 ${Boost_LIBRARIES})    # 链接Boost库

我用的编译环境是x86_64,所以我指定了Boost_ARCHITECTURE ,如果你是x86的环境,理论上你编译出来的库应该是x86的,而不是像我一样有两个版本(x86和x86_64)。

x86_64向下兼容x86,而x86不能运行x86_64编译出来的软件,这一点很重要!

如果cmake成功了,你应该可以看到跟我一样的正确提示。
在这里插入图片描述

2.Boost版本差异

这里多提一句,Boost这个库对C++来讲很重要,它本身也是在往前面发展的。不同版本的库可能组件是不一样的,比如我用的1.82.0里面有json组件,然而1.71.0里面没有这个组件,直接引用会报错。这种问题还有很多,你可以参考官方文档看下组件的情况。

这里我给出一种比较笨的解决方法:就拿json这个组件来说,如果你直接在CMakeLists.txt里面引用,cmake构建的时候会直接报错,导致不能进入下一步,也就是编译。

find_package(Boost COMPONENTS json REQUIRED)    # 查找Boost库

在这里插入图片描述
这个错误的意思是找不到这个组件,我们去库里面看看。对比下1.71.0和1.82.0发现,1.71.0确实没有这个组件。那么怎么办呢?方法其实很多种,最简单的就是使用第三方的jsoncpp,我就是这么使用的。

不要过度依赖boost

3.Boost版本适配

有时候程序员会有一个避不开的问题,或许你要用boost的新版本,却又发现有些东西不适配旧代码,这个办法也是有的。当然目前除了组件缺失,我没有遇到这种情况。

#if BOOST_VERSION >= 108200
    cout << "1.82.0" << endl;
#include <boost/json.hpp>
#elif BOOST_VERSION >= 107100
    cout << "1.71.0" << endl;
#elif BOOST_VERSION >= 106510
    cout<<"1.65.1"<<endl;
#endif

BOOST_VERSION 这个宏在<boost/version.hpp>里面,每个boost版本必带。主要有两个字段:
在这里插入图片描述
通过判断BOOST_VERSION 就可以做版本适配了。


总结

1、整个过程没有遇到什么错误,一气呵成。
2、如果有疑问,或者报错可以评论,我看到后会帮助你解决的。

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

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

相关文章

数据结构Pta训练题函数题详解

​ pta网站&#xff1a;PTA | 程序设计类实验辅助教学平台 (pintia.cn) 文章内容较长&#xff0c;建议搭配目录使用 点击直达快乐 6-1 线性表元素的区间删除解析&#xff1a; 6-2 有序表的插入解析&#xff1a; 6-3 合并两个有序数组解析 6-4 顺序表操作集解析 6-5 递增的整数…

Linux磁盘空间占满,但搜不到大文件

使用 df -h 查看磁盘空间 使用 du -sh * 查看每个目录的大小 经过查看没有发现任何大的文件夹。 继续下面的步骤 如果您的Linux磁盘已满&#xff0c;但是通过 du -sh 找不到大文件&#xff0c;可能是因为有一些进程正在写入磁盘&#xff0c;但是这些文件已经被删除&#…

与用户同行!2023卡萨帝开启高端生活方式新时代

6月20日&#xff0c;2023思享荟暨卡萨帝品牌升级发布会在重庆国际博览中心举行。在经历了高端产品引领、高端品牌引领、高端场景引领后&#xff0c;卡萨帝启动全新品牌升级&#xff0c;持续与用户同行&#xff0c;开启高端生活方式引领的新时代。 现场&#xff0c;海尔智家副总…

千万不能小瞧的PCB半孔板

PCB半孔是沿着PCB边界钻出的成排的孔&#xff0c;当孔被镀铜时&#xff0c;边缘被修剪掉&#xff0c;使沿边界的孔减半&#xff0c;让PCB的边缘看起来像电镀表面孔内有铜。 模块类PCB基本上都设计有半孔&#xff0c;主要是方便焊接&#xff0c;因为模块面积小&#xff0c;功能…

一键打车/代驾小程序源码app+司机入住uniapp+thinkphp

一键打车/代驾小程序源码app司机入住uniappthinkphp 系统技术架构 开发环境&#xff1a;PHP7.2 mysql5.7 后端&#xff1a;thinkphp 前端&#xff1a;uniapp 后台管理&#xff1a;PC端 司机端&#xff1a;安卓端 苹果端 乘客端&#xff1a;安卓端 苹果端 小程序端 功…

ai聊天推荐这些工具,告诉你ai聊天网站有哪些

“ai聊天网站有哪些”是一个常见的问题&#xff0c;当今互联网时代&#xff0c;人工智能技术正在不断发展&#xff0c;ai聊天网站和软件成为了人们交流和获取信息的重要工具。本文将为您介绍一些知名的ai聊天网站和软件&#xff0c;让您快速了解“ai聊天网站有哪些”这个问题。…

按钮权限布局(设置 element中 tree 树的排列)

页面中使用 <el-buttontype"text"click"edit(slotProps.date)"v-btn-key"[client:clue:update]">编辑</el-button><el-buttontype"text"click"del(slotProps.date)"v-btn-key"[client:clue:delete]&quo…

想读2023级中外合作办学硕士,人大女王金融硕士国际班或许是你最后的机会了

已经进入6月下旬&#xff0c;大部分院校中外合作办学在职研究生的招生已经截止&#xff0c;部分同学还在犹豫纠结中&#xff0c;各大高校的名额就已经都满了。想要读2023级还有可能吗&#xff1f;中国人民大学与加拿大女王大学金融硕士国际班还能给你一次机会。 虽然我们无法确…

【2023 阿里云云计算工程师 ACP 认证练习题库】03、ECS 知识点题库(下)

目录 单选题 1 2 3 答案与解析 4 ​5 6 ​答案与解析 7 8 答案与解析 9 ​答案与解析 10 ​答案与解析 11 12 13 14 15 16 答案与解析 17 18 19 20 21 22 23 24 25 ​答案与解析 26 27 28 29 ​答案与解析 …

校园外卖平台怎么做

校园外卖小程序是一款基于智能手机的移动应用&#xff0c;提供订餐、支付、配送等服务。它能为顾客提供丰富的美食选择&#xff0c;为商家提供进一步发展业务的机会&#xff0c;同时骑手也有机会赚取额外的收入。 一、 用户端功能介绍 1. 地图定位&#xff1a;用户可以利用小…

渐进式学习:如何用R和GO富集可视化捕捉生命的关键信号?

一、引言 生命科学中的数据分析和可视化是一个具有挑战性的领域。随着技术和理论的不断发展&#xff0c;研究人员需要处理越来越复杂和庞大的数据集&#xff0c;以研究生物体在不同尺度上的结构和功能&#xff0c;探索不同生物过程和疾病的机制。在这个领域&#xff0c;GO&…

【MySQL】一文带你了解数据过滤

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集&#xff01; &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指…

华为云“企业快成长大数据与微服务技术创新论坛”成功举办

6月16日&#xff0c;由华为云、msup、厦门火炬大学堂、厦门市行业软件协会联合主办的“企业快成长大数据与微服务技术创新论坛”在厦门成功举办。本次活动汇聚了华为云、珍爱网等知名企业的CTO和技术专家&#xff0c;通过技术案例解析了大数据平台构建、微服务演进等内容&#…

K8S证书过期解决办法之替换证书

目录 1 证书过期的情况 2 Kubernetes环境介绍 3 替换证书步骤 3.1 在master上查看各证书的过期时间 3.2 查看master&#xff08;192.168.0.190&#xff09;上kubelet证书列表 3.3 查看master&#xff08;192.168.0.190&#xff09;上kubelet证书的过期时间 3.4 查看nod…

在openSUSE-Leap-15.5-DVD-x86_64的gnome下使用远程桌面tigervnc

在openSUSE-Leap-15.5-DVD-x86_64的gnome下使用远程桌面tigervnc 在openSUSE-Leap-15.5-DVD-x86_64的tigervnc-1.12.0软件设计有变动了&#xff0c;变为一开机就启动远程桌面服务&#xff0c;没有vncserver取而代之是Xvnc&#xff0c;也在自己之前写的一篇博文的基础上作了修改…

vue跨域实现:proxy配置

一、什么是跨域 要了解跨域&#xff0c;首先得知道浏览器的同源策略。 同源策略&#xff1a;是由Netscape提出的一个安全策略&#xff0c;能够阻挡恶意文档&#xff0c;保护本地数据。它能限制一个源的文档或脚本对另一个源的交互&#xff0c;使得其它源的文档或脚本&#xf…

来看一个RuoYi-Cloud-Plus的Bug_今天突然发现的---RuoYi-Cloud-Plus-master工作笔记0002

用的时候可以注意一些,今天发现一个问题: 是关于角色管理这里的,如果你用的不是超级管理员登录,超级管理员他这里指定了ID是1, 如果你用其他,也是管理员账号,比如用超级管理员创建了一个管理员的角色,并且分配了,角色管理给这个管理员,那么,这个时候,你在给这个分配了角色管理…

CSAPP - LinkLab实验(阶段1-5)

LinkLab实验&#xff08;阶段1-5&#xff09; 官网&#xff1a;http://csapp.cs.cmu.edu/3e/labs.html 实验内容 每个实验阶段&#xff08;共5个&#xff09;考察ELF文件组成与程序链接过程的不同方面知识 阶段1&#xff1a;全局变量 <-> 数据节 阶段2&#xff1a;强符…

丝滑!软件开发根本不需要会编码(看我10分钟应用上线)

目录 一、前言 二、低代码基础功能及搭建 设计组件丰富 连接数据源 工作流设计 三、低代码和敏捷开发如何协同工作&#xff1f; 一、前言 众所周知&#xff0c;开发一个大型的企业级系统&#xff0c;公司往往需要大量的人力做支持后盾&#xff0c;如需要需求分析师、数据库管理…

使用chatgpt过funcaptcha验证码1个人学习记录

funcaptcha 验证码1 记录 funcaptch 有好几种验证码 验证码1 验证码2 验证码3 … 好多好多 今日记录验证码一完成记录&#xff1a; 这种验证码貌似每几天就换动物了 现在发现如下几种 如何解决&#xff1f; 训练模型计算目标位置 下面是我训练的模型计算的结果&…