Windows下Boost库源码编译安装及CMake配置实战指南

文章目录

  • 一、前言
  • 二、 安装Boost库
    • 下载Boost库源码
    • 使用Bootstrap脚本准备编译
    • 编译Boost库
    • 设置环境变量
  • 三、CMake配置案例
  • 四、总结


一、前言

在C++开发领域中,Boost库扮演着增强语言能力的关键角色,尤其针对系统级软件、游戏引擎及高性能应用。它弥补了C++标准库的不足,引入了智能指针、正则表达式、图形处理和数学计算等高级工具,提升了编码效率与安全性。然而,初次接触Boost的开发者可能会在Windows平台上遇到配置挑战。

本指南旨在简化这一过程,提供清晰步骤:从下载Boost源码到利用Bootstrap脚本建立环境,个性化编译配置,直至借助CMake顺利集成Boost到项目中,每环节均配备实践代码示例。我们的目标是让每位C++开发者能轻松上手Boost,迅速提升项目品质与开发速度,共赴C++编程的进阶之旅。


二、 安装Boost库

下载Boost库源码

从Boost官方网站下载源码。请访问Boost官网,选择适合您系统的版本进行下载。下载完成后,解压源文件到您选择的目录。

使用Bootstrap脚本准备编译

在Boost源码的根目录下,找到bootstrap.bat文件。在命令行中导航到该目录,并运行以下命令来准备编译环境:

.\bootstrap.bat

这个脚本将检查系统环境,并设置好编译Boost所需的配置文件。

编译Boost库

使用Bootstrap脚本生成的b2.exe工具来编译库。在命令行中输入以下命令开始编译:

.\b2.exe

可以通过添加参数来自定义编译过程,如指定编译的库和编译模式(debug或release)
我们以下面的命令来具体说明

b2 --build-dir=build-directory --stagedir=stage-directory toolset=msvc-14.3 address-model=64 variant=debug link=static threading=multi runtime-link=shared --with-filesystem

该命令使用 Boost.Build(通常称为 b2)来编译 Boost 库,特别是为 Visual Studio 环境定制。下面将详细解释命令中的每个参数及其作用:

  1. –build-dir=build-directory:指定临时构建文件(例如,编译中间产物)的存储目录。这有助于保持源目录的清洁,特别是在大规模构建时。一般可以不指定。
  2. –stagedir=stage-directory:指定构建完成的库文件存放的目录。这是构建系统将最终结果(如.lib和.dll文件)放置的位置。一般可以不指定,默认stage文件夹。
  3. toolset=msvc-14.3
    toolset: 指定编译器工具集。这里的 msvc-14.3 表示使用 Microsoft Visual C++ 编译器,14.3 通常对应 Visual Studio 2019 的特定版本。对于 Visual Studio 2022,您可能需要使用 msvc-14.3 或查找是否有更新的版本号(例如 msvc-14.3 或更高)。每个 Boost 版本可能对最新的 Visual Studio 支持有所不同,需要查看 Boost 的文档确认正确的版本标识。
  4. address-model=64
    address-model: 指定生成的库的地址模型。64 表示生成 64 位库。这是针对现代操作系统的标准配置,特别是在需要处理大量数据或使用较多内存的应用中。
  5. variant=debug
    variant: 指定构建类型。debug 表示生成的是调试版本的库,包含调试信息,便于开发和调试过程中跟踪问题。对应的是优化较少,运行速度可能较慢,但便于发现和修复错误。
  6. link=static
    link: 指定链接类型。static 表示生成静态库文件(.lib),与动态链接库(.dll)相对。静态库在程序编译时会被整合到最终的可执行文件中,增加了可执行文件的大小,但简化了部署过程,因为不需要额外的库文件。
  7. threading=multi
    threading: 指定库的线程支持类型。multi 表示库支持多线程,这是现代应用程序常见的需求,可以有效利用多核处理器。
  8. runtime-link=shared
    runtime-link: 指定运行时链接方式。shared 表示程序将使用共享的运行时库(CRT),即在多个程序间共享相同的运行时库,可以减少程序大小,常用于需要减小单个程序占用空间的情况。
  9. –with-filesystem
    –with-filesystem: 指定只编译 filesystem 组件的库。Boost 库包含多个组件,使用这种方式可以只编译需要的部分,从而节约编译时间和资源。

此命令通过详细指定各种编译选项来精确控制 Boost 库的构建过程,确保生成的库符合特定的开发需求和目标环境。这种定制性使得 Boost 库非常灵活,能够满足不同开发者在不同开发环境中的需求。

设置环境变量

编译完成后,可以将Boost库的路径添加到系统的环境变量中,以便在项目中使用。


三、CMake配置案例

在介绍了Windows下Boost源码安装方法之后,接下来我们将探讨如何利用CMake高效地配置依赖于Boost的工程。CMake通过其强大的find_package命令能够轻松集成Boost库,以下是配置步骤及注意事项的概览。

CMakeLists.txt 示例

cmake_minimum_required(VERSION 3.15)
project(BoostExample)

# 设置C++标准
set(CMAKE_CXX_STANDARD 14)

# 设置Boost库的根目录(应指向 Boost 的安装根目录)
set(BOOST_ROOT "D:/xxx/boost_1_85_0")

# 禁用搜索系统路径
set(Boost_NO_SYSTEM_PATHS ON) # 非常重要,否则会导致找不到 Boost 库

# 查找Boost库,指定需要的组件
# find_package(Boost REQUIRED COMPONENTS filesystem regex)
find_package(Boost REQUIRED)

# 输出 Boost 的相关信息
message("Boost version: ${Boost_VERSION}")
message("Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
message("Boost_LIBRARY_DIRS: ${Boost_LIBRARY_DIRS}")
message("Boost_LIBRARIES: ${Boost_LIBRARIES}")

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

# 链接Boost库目录
link_directories(${Boost_LIBRARY_DIRS})

# 创建可执行文件
add_executable(BoostExample main.cpp)

# 链接Boost库
target_link_libraries(BoostExample ${Boost_LIBRARIES})

要特别注意禁用搜索系统路径,对于很多AI工作者来说,一般都会安装Anaconda,并配置环境变量。如果不禁用搜索系统路径,很容易找到Anaconda下的路径,导致配置失败。如果出现这种情况,将build中的所有内容删除掉,再重新配置就好。
另外我们观察输出的信息Boost_LIBRARIES为空,也就是说target_link_libraries(BoostExample ${Boost_LIBRARIES})这个不要也可以,实际上确实如此。

[cmake] Boost version: 1.85.0
[cmake] Boost_INCLUDE_DIRS: D:/MySoft/boost_1_85_0
[cmake] Boost_LIBRARY_DIRS: D:/MySoft/boost_1_85_0/stage/lib
[cmake] Boost_LIBRARIES: 

四、总结

本文详细指导了在Windows系统下从源码编译与安装Boost库的全过程,包括下载源码、使用Bootstrap脚本准备编译环境、通过b2命令定制化编译库文件,以及设置环境变量使Boost库在系统中可用。进一步介绍了如何运用CMake通过find_package命令轻松集成Boost库到项目中,强调了配置时的关键点,如指定Boost根目录、禁用系统路径搜索等,确保开发者能高效配置依赖Boost的工程项目。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【基础算法】二分查找

1.二分查找 二分查找 思路&#xff1a; 朴素二分模版 class Solution { public:int search(vector<int>& nums, int target) {int l 0, r nums.size() - 1;while(l < r){int mid (l r) / 2;if(nums[mid] < target) l mid 1;else if(nums[mid] > ta…

综合性练习(后端代码练习1)——加法计算器

目录 一、准备工作 二、约定前后端交互接口 1、概念介绍 2、需求分析 3、接口定义 请求参数 响应数据 三、服务器代码 四、前端页面代码 五、运行测试 遇到问题如何解决&#xff1f; 需求&#xff1a;输入两个整数&#xff0c;点击 “点击相加” 按钮&#xff0c;显…

JAVA顺序表相关习题1

1.笔试题:cvte str1 :welcome to cvte str2:come 描述:删除第一个字符串当中出现的所有的第二个字符串的字符!结果:wlt vt 要求 用ArrayList完成! public class Test {public static List<Character> findSameWords(String u1, String u2){List<Character> listn…

前端请求没问题,后端正常运行,但查不出数据

写代码时写得快了些&#xff0c;Orders.的订单状态写错了CONFIRMED 改成COMPLETED

二、再识VUE-MVVM

一、初识VUE 二、再识VUE-MVVM 三、VUE数据代理 MVVM Vue.js 专注于 MVVM 模型的 ViewModel 层。它通过双向数据绑定把 View 层和 Model 层连接了起来。实际的 DOM 封装和输出格式都被抽象为了 Directives 和 Filters。 ViewModel 一个同步 Model 和 View 的对象。在 Vue.js…

汇川AM400PLC编码器转速测量功能块(M法测速)

M法测速的原理和相关代码,大家可以参考相关专栏文章,常用链接如下: 1、编码器M法测速仿真 编码器M法测速仿真(Simulink)_mt法测速 simulink-CSDN博客文章浏览阅读2k次。编码器M法和T法测速的详细讲解可以参看下面的文章链接,这里不再赘述,这里主要介绍Simulink里建模仿真…

(06)vite与ts的结合

文章目录 系列全集package.json在根目录创建 tsconfig.json 文件在根目录创建 vite.config.ts 文件index.html额外的类型声明 系列全集 &#xff08;01&#xff09;vite 从启动服务器开始 &#xff08;02&#xff09;vite环境变量配置 &#xff08;03&#xff09;vite 处理 c…

详细介绍如何使用YOLOv9 在医疗数据集上进行实例分割-含源码+数据集下载

深度学习彻底改变了医学图像分析。通过识别医学图像中的复杂模式,它可以帮助我们解释有关生物系统的重要见解。因此,如果您希望利用深度学习进行医疗诊断,本文可以成为在医疗数据集上微调YOLOv9 实例分割的良好起点。 实例分割模型不是简单地将区域分类为属于特定细胞类型,…

新质生产力实践,我用chatgpt开发网站

是的&#xff0c;我用chatgpt开发了一个网站&#xff0c;很轻松。 我之前一点不懂前端&#xff0c;也没有网站开发的代码基础&#xff0c;纯正的0基础。 从0开始到最后成品上线&#xff0c;时间总计起来大致一共花了2-3周的时间。 初始想法我是想给我公司开发一个网站&#…

3月8日是星期六

突然有查询特殊条件日期的需求。 <html> <title>3月8日是星期六</title> <center> <h1 id"h1"></h1> <div id"div"></div> </center> <script> var weekday [星期日, 星期一, 星期二, 星期…

Eclipse:-Dmaven.multiModuleProjectDirectory system propery is not set.

eclipse中使用maven插件的时候&#xff0c;运行run as maven build的时候报错 -Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match. 可以设一个环境变量M2_HOME指向你的maven安装目录 M2_HOMED:\Apps\…

echarts开发技巧

tooltip 提示框组件相关的行为&#xff0c;必须引入提示框组件后才能使用。 tooltip: {trigger: axis,axisPointer: {type: cross,label: {backgroundColor: #6a7985,},},//为弹出层的value值增加百分号valueFormatter: function (value) {return value %}, }, tooltip.axi…

碳课堂|快速了解标准要点:ISO 14064-1

为了提高企业组织碳排放报告信誉度&#xff0c;国际标准化组织&#xff08;ISO&#xff09;发布了ISO14064 标准&#xff08;全称&#xff1a;《ISO 14064-1组织层次上对温室气体排放和清除的量化和报告的规范及指南》&#xff09;&#xff0c;报告中详细规定了公司温室气体清单…

确定性最大似然(DML)估计测角

1. 最大似然函数 贝叶斯方法是基于统计理论的一种经典方法&#xff0c;适合于有关参数估计问题。最大似然 (Maximum Likelihood&#xff0c;ML) 估计方法就是贝叶斯估计方法的一种特例&#xff0c;是在已知高斯噪声情况下的贝叶斯最优估计。在ML算法中&#xff0c;观测所得信号…

品牌出海新篇章:独立站构建与流量转化策略

在当今数字化时代&#xff0c;品牌出海已成为许多企业拓展国际市场的重要途径之一。在这个过程中&#xff0c;构建一个高效、专业的独立站&#xff0c;成为了品牌出海的重要一环。独立站不仅有助于企业塑造独特的品牌形象&#xff0c;更能通过精准的营销策略提高流量和转化率&a…

乘用车整车太阳光模拟加速老化试验太阳光模拟器

1.阳光模拟试验介绍 太阳辐射会对室外停放的汽车内外饰件产生热效应和光化学效应&#xff0c;影响汽车内外饰件的外观、性能&#xff0c;对汽车质产生不利影响。按照汽车产环境试验标准的要求&#xff0c;汽车在研制定型之前应进行太阳辐射试验&#xff0c;以考虑其对太阳辐射环…

微服务之分布式理论zookeeper概述

一、分布式技术相关的理论 CAP理论 CAP定理(CAP theorem)&#xff0c;⼜被称作布鲁尔定理(Eric Brewer)&#xff0c;1998年第⼀次提出. 最初提出是指分布式数据存储不可能同时提供以下三种保证中的两种以上: (1) ⼀致性(Consistency): 每次读取收到的信息都是最新的; (2) …

探索主播美颜工具与直播美颜SDK的技术奥秘

主播的形象美化是至关重要的一环&#xff0c;而实现这一目标的关键在于美颜工具和直播美颜SDK。接下来&#xff0c;我们将一同深入探索这些技术的奥秘&#xff0c;揭示它们背后的原理和工作方式。 一、美颜工具的背后 美颜工具是一类应用软件&#xff0c;旨在通过图像处理技术…

树莓派点亮LED灯

简介 使用GPIO Zero library 的 Python库实现点亮LED灯。接线 树莓派引脚参考图如下&#xff1a; LED正极 接GPIO17 LED负极 接GND 权限 将你的用户加到gpio组中&#xff0c; 否则无法控制GPIO sudo usermod -a -G gpio 代码 from gpiozero import LED from time impor…

基于H.264的RTP打包中的组合封包以及分片封包结构图简介及抓包分析;FU-A FU-B STAP-A STAP-B简介;

H.264视频流的RTP封装类型分析&#xff1a; 前言&#xff1a; 1.RTP打包原则&#xff1a; RTP的包长度必须要小于MTU(最大传输单元)&#xff0c;IP协议中MTU的最大长度为1500字节。除去IP报头&#xff08;20字节&#xff09;、UDP报头&#xff08;8字节&#xff09;、RTP头&a…
最新文章