Boost库编译指南

这篇具有很好参考价值的文章主要介绍了Boost库编译指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. Boost 库简介

Boost 是一个开源的 C++ 库集合,提供了许多高质量的库,涵盖了许多不同的领域,如智能指针、多线程编程、正则表达式、数学库等等。Boost 的目标是提高 C++ 程序员的生产力和代码质量,同时遵循现代 C++ 的最佳实践。

Boost 库是由一些 C++ 标准委员会成员创建和维护的,因此 Boost 中的一些组件被认为是 C++ 标准库的前身。Boost 库在 C++ 标准化之前提供了很多常用的工具,因此被广泛地应用于各种开源和商业项目中。它的一些主要组件包括:

  • 智能指针:提供了多种智能指针类型,如 shared_ptr、unique_ptr、weak_ptr 等,可以方便地管理动态分配的内存,避免内存泄漏和野指针问题。
  • 多线程库:提供了多线程编程的支持,包括线程、互斥锁、条件变量、原子操作等。
  • 泛型编程库:提供了元编程和泛型编程的支持,如类型推导、类型萃取、可变参数模板等。
  • 正则表达式库:提供了正则表达式的支持,可以进行字符串匹配和替换等操作。
  • 数学库:提供了一些数学算法和函数,如矩阵运算、随机数生成、数值计算等。
  • 文件系统库:提供了对文件系统的支持,可以进行文件和目录的遍历、读写操作等。

2. Boost 库下载

我们可以从 Boost 官方网站下载源代码 👉 Boost C++ Libraries

boost库,C++,c++,windows,linux,后端,visualstudio

具体下载过程不在这里展开说明,最新版本可以在 Boost Downloads 中直接下载,历史版本在 Boost Version History 页面下载。

这里我们下载 Boost 库最新版本 1.81.0
boost库,C++,c++,windows,linux,后端,visualstudio

如果你需要在 Windows 上使用 Boost 库,则下载 windows 那一行里的任意一个压缩包;如果是在 Unix/Linux 中使用 Boost 库,则下载 unix 那一行里的任意一个压缩包。


3. Boost 库编译

我们作为 C++ 开发者,有时会在不同架构、不同系统中使用 Boost 库,下面我将会讲解以下编译过程:

👉 如何在 Windows 操作系统下使用 MSVC、MinGW 编译 Boost 库

👉 如何在 Windows 操作系统下使用交叉编译器编译 Boost 库

👉 如何在 Linux 下使用 GCC 编译 Boost 库

👉 如何在 Linux 下使用交叉编译器编译 Boost 库。

3.1 在 Windows 下使用 MSVC 编译 Boost 库

我们需要准备最新版 VisualStudio,并打开 VisualStudio 的命令行工具。如果你还没有安装 VisualStudio,可以到它的官方网站中去下载安装 👉 Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 (microsoft.com)。具体的下载和安装过程这里不展开说明,如果需要可查看官方文档和其他博客。

3.1.1 生成 b2.exe

打开 Powershell, 由于我的电脑的操作系统是 Windows11 22H2,控制台窗口会自动由 Windows Terminal 接管,关于 Powershell 的相关说明文档可以从这里查看 👉 PowerShell 文档 - PowerShell | Microsoft Learn
boost库,C++,c++,windows,linux,后端,visualstudio

使用 cd ​进到 Boost 库源码目录。注意,如果你的目录中有空格,需要加双引号

boost库,C++,c++,windows,linux,后端,visualstudio

执行命令:.\bootstrap.bat​,生成可执行文件 b2.exe

boost库,C++,c++,windows,linux,后端,visualstudio

生成成功后,可以看到目录下多了一个 b2.exe

boost库,C++,c++,windows,linux,后端,visualstudio

3.1.2 编译和安装

查看 Boost 组件库列表:./b2.exe --show-libraries​。如果我们只用到其中几个库,则可以只编译需要的库,当然也可以全部编译。

boost库,C++,c++,windows,linux,后端,visualstudio

接下来我们就需要用 b2.exe 来组织和构建 Boost 库的编译了。在进行操作之前,先对 b2 的使用参数做一下说明介绍:

  • stage 生成链接库(动态库或静态库)到 stagedir中。(不含头文件)
  • --stagedir=: 在 stage ​生成模式下的输出目录,支持相对路径。
  • install: 生成链接库(动态库或静态库)到 prefix​/lib 中,并将头文件放入到 prefix​/include 中
  • --prefix=: 在 install ​生成模式下的输出目录
  • toolset=: 指定编译器。b2 会自行检索当前系统下的编译器,如果该参数为缺省值,那么 b2 将使用 Boost 源码根目录下的 project-config.jam ​文件中的第一个编译器。
  • --without-: 排除哪些库,例如 --without-wave --without-test​ ,表示除了 wave 库和 test 库其他都编译。
  • --with-: 编译哪些库,例如 --with-wave --with-test​,表示只编译 wave 和 test 库。
  • --build-dir=: 设置编译过程中间产物的存放路径,默认是 bin.v2​ 。
  • link=​ : 设置生成的链接库是动态 shared ​链接库还是静态 static ​链接库。默认值为 static
  • runtime-link=: 设置运行时库的链接方式,是静态链接 static ​还是动态链接 shared​。默认值为 shared
  • threading=: 设置是否支持多线程(线程安全)。允许的值为单 single ​线程和多 multi ​线程。默认值为多线程 multi
  • variant=: 设置生成的库是调试版本还是发布版本,允许的值为 debug ​或 release​,默认值为 release debug ​即两者都编译。
  • address-model=: 设置生成的库地址模式,是 32 位还是 64 位,允许的值为 32​ 和 64​,默认两者都编译。
  • --project-config=​ : 加载指定项目配置文件,默认值为 project-config.jam

关于 toolset ​参数允许为以下值:

boost库,C++,c++,windows,linux,后端,visualstudio

基本的参数说明完毕,接下来编译 Boost 库,我们想要对 b2 做以下功能约束:

  • 将 Boost 组件全部编译,并将库和头文件输出到…/install/msvc 下。
  • 静态链接运行时库
  • 使用 MSVC 编译器
  • 生成的库为静态库
  • 支持多线程,生成 32 位和 64 位库,并且生成 debug 和 release 版本库。
  • 将中间编译产物放到 build/msvc 目录下

根据上述约束条件,则命令可以这样写:

./b2.exe install --prefix="../install/msvc" --build-dir="build/msvc" runtime-link=static

可以看到,我并没有指定 MSVC 编译器,因为 b2 会默认使用源文件目录下的 project-config.jam ​文件,其中只有一个编译器,那就是 MSVC,所以一切保持默认值,只设置生成模式为 install​,设置安装目录,设置中间编译产物生成目录,设置运行时库链接模式即可。

boost库,C++,c++,windows,linux,后端,visualstudio

boost库,C++,c++,windows,linux,后端,visualstudio

编译完成,看下安装目录:

boost库,C++,c++,windows,linux,后端,visualstudio

boost库,C++,c++,windows,linux,后端,visualstudio

boost库,C++,c++,windows,linux,后端,visualstudio

因为是 MSVC 编译出来的,所以静态链接库默认的后缀名为 .lib​,检查一下库文件命名,例如:libboost_wave-vc143-mt-s-x64-1_81.lib

  • libboost_wave: 库名称
  • vc143: MSVC 14.3
  • mt: 多线程
  • s: 静态链接运行时库
  • x64: 64 位库
  • 1_81: Boost 版本号

经检查,b2 根据我们的命令在指定目录正确生成了静态链接库和头文件,并且符合我们的要求。关于 Boost 库文件命名规则,可以查看官网 👉 Boost Getting Started on Unix Variants - 1.66.0

boost库,C++,c++,windows,linux,后端,visualstudio

3.2 在 Windows 下使用 MinGW 编译 Boost 库

首先,需要准备 MinGW,这里使用目前最新版 w64devkit 开发套件,当前最新版本为 1.16.1,其内部包含以下工具:

  • GCC 12.2.0
  • busybox-w32 FRP-4716
  • GDB 10.2
  • Mingw-w64 10.0.0
  • GNU Make 4.2
  • Vim 9.0
  • Universal Ctags 20200824
  • NASM 2.15.05
  • binutils 2.39
  • Cppcheck 2.8

安装步骤如下:

一、w64devkit 下载

  • 下载地址 1: w64devkit-1.16.1.zip

  • 下载地址 2: Release 1.16.1 · skeeto/w64devkit (github.com)

二、添加环境变量

下载完成后解压压缩包,将文件夹中的 bin 目录添加到 PATH 环境变量,此步骤不展开讨论

添加完成后验证 MinGW 是否添加到 PATH 中:

boost库,C++,c++,windows,linux,后端,visualstudio

3.2.1 生成 b2.exe

如果已经生成了 b2.exe, 则可跳过本小结,过程这里不再赘述,详情可查看前文 👉 3.1.1

3.2.2 编译和安装

根据 3.1.2 小结,我们已经知道了 b2 的使用方法,那么我们就直接开练!

  • 只编译 system 和 filesystem 库,并将库和头文件输出到…/install/mingw 下。
  • 静态链接运行时库
  • 使用 MinGW 编译器
  • 生成的库为静态库
  • 支持多线程,生成 32 位和 64 位库,并且生成 debug 和 release 版本库。
  • 将中间编译产物放到 build/mingw 目录下

根据上述功能约束,我们可以写如下命令:

./b2.exe install --prefix="../install/mingw" --build-dir="build/mingw" runtime-link=static toolset=gcc --with-system --with-filesystem

其中 toolset=gcc​ 表示使用我们刚才安装的 MinGW 作为编译器.(由于刚才设置了环境变量,所以默认的 gcc 就是我们刚才安装的 MinGW)。

boost库,C++,c++,windows,linux,后端,visualstudio

编译完成,检查输出:

boost库,C++,c++,windows,linux,后端,visualstudio

boost库,C++,c++,windows,linux,后端,visualstudio

3.3 在 Windows 下交叉编译 Boost 库

这里我们使用 gcc-aarch64-linux-gnu 交叉编译工具链进行编译,下载地址 👉Linaro Releases

下载之后解压即可。

boost库,C++,c++,windows,linux,后端,visualstudio

3.3.1 生成 b2.exe

如果已经生成了 b2.exe, 则可跳过本小结,过程这里不再赘述,详情可查看前文 👉 3.1.1

文章来源地址https://www.toymoban.com/news/detail-613461.html

3.3.2 编译和安装

根据 3.1.2 小结 提到的可以根据 --project-config=​ 指定配置文件,这里我们为了交叉编译,单独写一份 project-config-aarch64.jam ​文件:

# Boost.Build Configuration 
# Automatically generated by bootstrap.bat 
 
import option ; 
 
using gcc  :  aarch64  :  "E:/Design_ProgramEnv/GNU/ARM/aarch64-linux-gnu 7.2.1/bin/aarch64-linux-gnu-g++.exe" ;
 
option.set keep-going : false ; 

详情可参考 b2 官方文档 👉 B2 User Manual - 1.81.0 (boost.org) 5.9 小节和 4.3 小节

当然也可以把

using gcc : aarch64 : 7.2.1 : "E:/Design_ProgramEnv/GNU/ARM/aarch64-linux-gnu 7.2.1/bin/aarch64-linux-gnu-g++" ;

写在默认的 project-config.jam 文件中也是可以的,我们向根据以下约束进行编译:

  • 只编译 system 和 filesystem 库,并将库和头文件输出到…/install/aarch64 下。
  • 静态链接运行时库
  • 使用 gcc-aarch64-linux-gnu 交叉编译工具链
  • 生成的库为静态库
  • 支持多线程,生成 32 位和 64 位库,并且生成 debug 和 release 版本库。
  • 将中间编译产物放到 build/aarch64 目录下

根据上述功能约束,我们可以写如下命令:

./b2.exe install --prefix="../install/aarch64" --build-dir="build/aarch64" runtime-link=static toolset=gcc-aarch64 --with-system --with-filesystem target-os=linux --project-config="./project-config-aarch64.jam"

其中 target-os=linux​ 为目标操作系统,当交叉编译平台操作系统与目标操作系统不一致时,需要指定该参数,该参数的值可以是:aix​, android​, appletv​, bsd​, cygwin​, darwin​, freebsd​, haiku​, hpux​, iphone​, linux​, netbsd​, openbsd​, osf​, qnx​, qnxnto​, sgi​, solaris​, unix​, unixware​, windows​, vms​, vxworks​, freertos​. 详情查阅 👉 B2 User Manual - 1.81.0 (boost.org)

boost库,C++,c++,windows,linux,后端,visualstudio

编译完成,检查安装目录以及库文件:

boost库,C++,c++,windows,linux,后端,visualstudio

3.4 在 Ubuntu 20.04 下使用 GCC 编译 Boost 库

参考 👉 第二节 Boost 库下载 拿到 boost_1_81_0.tar.gz​ 下载链接,用 SSH 连接到 Ubuntu 后,使用 wget 命令下载源码包:

wget https://boostorg.jfrog.io/artifactory/main/release/1.81.0/source/boost_1_81_0.tar.gz

如果下载很慢,则可以用其他方式下载并传输到 Ubuntu 中。下载完成之后解压缩:

tar -zxvf ./boost_1_81_0.tar.gz

boost库,C++,c++,windows,linux,后端,visualstudio

boost库,C++,c++,windows,linux,后端,visualstudio

3.4.1 编译 b2

与在 windows 下编译不同,这里执行 bootstrap.sh

boost库,C++,c++,windows,linux,后端,visualstudio

编译完成后,可以看到文件夹中多出来一个 b2 可执行文件

boost库,C++,c++,windows,linux,后端,visualstudio

3.4.2 编译和安装

Linux 下的编译过程与在 Windows 操作系统编译 Boost 过程几乎一致,这里直接演示:

  • 将 Boost 组件全部编译,并将库和头文件输出到…/install/amd64 下。
  • 静态链接运行时库
  • 使用 gcc 编译器
  • 生成的库为静态库
  • 支持多线程,只生成 64 位库,并且生成 debug 和 release 版本库。
  • 将中间编译产物放到 build/amd64 目录下

根据上述约束条件,则命令可以这样写:

./b2 install --prefix="../install/amd64" --build-dir="build/amd64" runtime-link=static 

boost库,C++,c++,windows,linux,后端,visualstudio

boost库,C++,c++,windows,linux,后端,visualstudio

编译完成,查看下输出:

boost库,C++,c++,windows,linux,后端,visualstudio

可以看到在 Linux 下并没有区分 debug/release 版本, 是否支持多线程等命名标识。于是在 StackOverflow 上查到了相关提问:在 Unix 或 Linux 下,自 Boost1.40.0 中就已经默认取消了库的名称修饰,如果需要名称修饰的话,则添加 b2 参数 --layout=tagged

修改后的命令为:

./b2 install --prefix="../install/amd64" --build-dir="build/amd64" runtime-link=static --layout=tagged

编译,查看输出:

boost库,C++,c++,windows,linux,后端,visualstudio

发现输出的库都是 Release 版本,所以我们再次修改命令,显式的声明各项参数:

./b2 install --prefix="../install/amd64" --build-dir="build/amd64" runtime-link=static --layout=tagged variant=debug variant=release address-model=64

其中 variant 声明了两遍,这样理论上 b2 就会帮我们编译两种不同类型的库,如下所示:

boost库,C++,c++,windows,linux,后端,visualstudio

3.5 在 Ubuntu 20.04 下交叉编译 Boost 库

首先需要在 Ubuntu 上安装交叉编译器,这里我还是用 gcc-aarch64-linux-gnu 工具链,可以从 ARM 官网上或者 Linaro 中下载,也可以直接从 apt 源站下载:

sudo apt-get install gcc-aarch64-linux-gnu

安装完成后,查看编译器是否正确安装:

boost库,C++,c++,windows,linux,后端,visualstudio

3.5.1 编译 b2

如果已经生成了 b2, 则可跳过本小节,过程这里不再赘述,详情可查看前文 👉 3.4.1

3.5.2 编译和安装

这里直接编辑 project-config.jam​ 文件,将交叉编译器写入到配置文件中:

using gcc : aarch64 : aarch64-linux-gnu-g++ ;

boost库,C++,c++,windows,linux,后端,visualstudio

其交叉编译过程与 Windows 下过程基本一致,这里参考 3.3.2 与 3.4.2 小节内容,做以下功能约束:

  • 只编译 system 和 filesystem 库,并将库和头文件输出到…/install/aarch64 下。
  • 静态链接运行时库
  • 使用 gcc-aarch64-linux-gnu 交叉编译工具链
  • 生成的库为静态库
  • 支持多线程,生成 64 位库,并且生成 debug 和 release 版本库。
  • 将中间编译产物放到 build/aarch64 目录下

输入命令:

./b2 install --prefix="../install/aarch64" --build-dir="build/aarch64" runtime-link=static --layout=tagged variant=debug variant=release address-model=64 toolset=gcc-aarch64 --with-system --with-filesystem target-os=linux

查看输出:

boost库,C++,c++,windows,linux,后端,visualstudio


4. 总结

看了 B2 的官方文档后,其实发现 B2 还是很好用的,比如支持一次构建多个平台的 Boost 组件库,Debug 和 Release 版本同时编译输出,区分 install 模式和 stage 模式等,基本上涵盖了日常开发大部分编译的需求。

关于 install 模式和 stage 模式,我认为这是两种不同的依赖方式:

  • install 模式:头文件导出,并且将编译好的库与 Boost 源代码彻底分离。这种模式下适合做 git-submodule 依赖导入。
  • stage 模式:只生成链接库。这种模式非常适合 CMake 的 FatchContent 依赖管理模式,自己工程的代码与 Boost 一起编译(当然有依赖顺序,CMake 就非常适合处理这种事务关系)。

我个人两种依赖方式都用,但是对于 Boost,我还是偏向于用 git-submodule 作为依赖管理器,对于其他小组件,例如 fmt, spdlog 等,用 CMake-FathContent 就很舒服了。

5. 参考资料

  1. B2 User Manual - 1.81.0 (boost.org)
  2. Boost Getting Started on Unix Variants - 1.66.0
  3. Building Boost on Linux - library names - Stack Overflow

到了这里,关于Boost库编译指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Boost开发指南-4.4assign

    许多情况下我们都需要为容器初始化或者赋值,填入大量的数据,比如初始错误代码和错误信息,或者是一些测试用的数据。在C++98中标准容器仅提供了容纳这些数据的方法,但填充的步骤却是相当地麻烦,必须重复调用insert()或者push_back()等成员函数,这正是boost.assign出现的

    2024年02月12日
    浏览(34)
  • Boost开发指南-4.3optional

    在实际的软件开发过程中我们经常会遇到“无效值”的情况,例如函数并不是总能返回有效值,很多时候函数正确执行了,但结果却不是合理的值。如果用数学语言来解释,就是返回值位于函数解空间之外。 求一个数的倒数,在实数域内开平方,在字符串中查找子串,它们都

    2024年02月13日
    浏览(37)
  • windows环境cmake引用boost库

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总

    2024年02月09日
    浏览(37)
  • Boost程序库完全开发指南:1-开发环境和构建工具

      Boost官方于2019年12月发布的1.72版编写,共包含160余个库/组件,涵盖字符串与文本处理、容器、迭代器、算法、图像处理、模板元编程、并发编程等多个领域,使用Boost,将大大增强C++的功能和表现力。环境:Windows 10,WSL2,Ubuntu 20.04 LTS,Rider(WSL远程开发),gcc/g++ 9.4.0,

    2024年02月07日
    浏览(43)
  • ubuntu上安装boost库为SOMEIP的X86和ARM下编译做准备(编译两种版本)

    Boost库是C++拓展库,是SOMEIP源码编译所必需的库。编译 Boost 库时,需要根据不同的架构,选择不同的工具链和参数 首先,Boost源码下载,Boost官网:https://www.boost.org 基于此处我编译的SOMEIP源码版本,需要安装1.74版本的Boost库,下载链接:https://boostorg.jfrog.io/artifactory/main/relea

    2024年02月10日
    浏览(40)
  • 【Boost2】Boost电路的电感选型

    在Buck电路的输出电感的分析过程中,我们已经提到了电感的保持电流不突变的特性。 1.电感电流变化规律 假设电流流经电感,但是电感的磁场不变化,电感就不会产生阻碍电流变化的感生电动势,电感在直流电路中就相当于一根导线,导线本身的电阻值很小,因此它对电流

    2024年02月13日
    浏览(31)
  • C++项目——集群聊天服务器项目(一)项目介绍、环境搭建、Boost库安装、Muduo库安装、Linux与vscode配置

    今天开始想更新一个C++项目,实现一个 支持跨服务器通信、支持负载均衡的集群聊天服务器项目 。项目会应用muduo网络库、CMake编译、MySQL数据库、JSon序列化与反序列化、Redis消息订阅模式以及Nginx负载均衡功能。 有兴趣的宝可以跟我一起实操起来,巩固自己的C++学习吧~ 本项

    2024年04月14日
    浏览(57)
  • BUCK、BOOST、BUCK-BOOST电路原理分析

    DC-DC DC-DC电源,即直流-直流变换器,是指将一个固定的直流电压变换为可变的直流电压,也称为直流斩波器。DC-DC有多种拓扑结构,如BUCK(降压)、BOOST(升压)、BUCK-BOOST(升降压)三大基本拓扑结构。 斩波器的工作方式有两种,一是PWM波“定频调宽”,即脉宽调制方式Ts不

    2024年02月03日
    浏览(106)
  • c++ boost::json

    Boost社区12月11日发布了1.75版本,在之前,​​Boost使用Boost.PropertyTree解析​​JSON​​​,​​XML​​​,​​INI​​​和​​INFO​​​格式的文件。但是由于成文较早及需要兼容其他的数据格式,相比较于其他的​​C++​​解析库,使用时不方便。 ​Boost.JSON​​​相对于​

    2024年02月11日
    浏览(28)
  • C++:Boost库

    Boost是一个功能强大,构造精良,跨越平台,代码开源,完全免费的C++程序库。 共包含160余个库/组件,涵盖字符串与文本处理、容器、迭代器、算法、图像处理、模板元编程、并发编程等多个领域。 由c++标准委员会成员发起倡议并建立boost社区,C++11标准库中三分之二来自boost,并且将

    2024年02月14日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包