Boost库编译指南

2023-05-16

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 Downloads 中直接下载,历史版本在 Boost Version History 页面下载。

这里我们下载 Boost 库最新版本 1.81.0
在这里插入图片描述

如果你需要在 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
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

3.1.2 编译和安装

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

在这里插入图片描述

接下来我们就需要用 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 库,我们想要对 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​,设置安装目录,设置中间编译产物生成目录,设置运行时库链接模式即可。

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

因为是 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

在这里插入图片描述

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 中:

在这里插入图片描述

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)。

在这里插入图片描述

编译完成,检查输出:

在这里插入图片描述

在这里插入图片描述

3.3 在 Windows 下交叉编译 Boost 库

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

下载之后解压即可。

在这里插入图片描述

3.3.1 生成 b2.exe

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

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)

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

3.4.1 编译 b2

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

在这里插入图片描述

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

在这里插入图片描述

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 

在这里插入图片描述

在这里插入图片描述

编译完成,查看下输出:

在这里插入图片描述

可以看到在 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

编译,查看输出:

在这里插入图片描述

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

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

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

在这里插入图片描述

3.5 在 Ubuntu 20.04 下交叉编译 Boost 库

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

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

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

在这里插入图片描述

3.5.1 编译 b2

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

3.5.2 编译和安装

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

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

在这里插入图片描述

其交叉编译过程与 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

查看输出:

在这里插入图片描述


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

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

Boost库编译指南 的相关文章

  • aur报错(错误:一个或多个文件没有通过有效性检查)

    当我们从aur里安装软件时 xff0c 有时会出现这种报错 xff08 如安装deepin wine wechat xff09 61 61 gt 错误 xff1a 一个或多个文件没有通过有效性检查 xff01 Error downloadi
  • Java使用不同方式获取两个集合List的交集、补集、并集(相加)、差集(相减)

    1 明确概念 首先知道几个单词的意思 xff1a 并集 61 union 交集 61 intersection 补集 61 complement 析取 61 disjunction 减去 61 subtract 1 1 并集 对于两个给定集
  • 【VTK】VTK框选表面拾取三角面片——通过观察者命令模式

    VTK框选拾取三角面片 最近需要实现拾取三角面片的交互功能 xff0c 看了官方示例和网友分享 xff0c 都是使用vtkInteractorStyleRubberBandPick搭配vtkAreaPicker 但是具体实现方法都是选择继承
  • 【VTK】VTK框选表面拾取面片——仅选中前表面

    VTK框选表面拾取面片 仅选中前表面 接上一篇 VTK框选表面拾取三角面片 通过观察者命令模式 上一篇最后遗留一个问题 xff0c 框选表面后 xff0c 会把模型背面的面片也一起选中 所以这篇内容是解决该问题的 效果预览 功能说明 通过鼠
  • GoDB开发踩坑记

    前言 前几天因为leancloud网速太慢所以自己写了一个go语言数据库 xff0c 想部署到我的树莓派上 正文 我在写的时候发现了一些神奇的操作 golang 把js变量的表达方式字符串转换成go变量 可以先把它嵌入到一个json字符串中
  • 通过Java反射获得对象里面的所有字段名以及字段对应的值

    首先我们有一个对象类 span class token keyword package span com span class token punctuation span xuzihui span class token punctuat
  • GoDB开发踩坑记(代码实现)

    前言 之前写了一篇GoDB开发踩坑记但是内容有些不全 xff0c 所以来补充一下 所以没看过GoDB开发踩坑记的可以先看一下那篇文章 正文 golang encode josn 把map string interface 转换为json字符
  • vim配置

    众所周知 xff0c vim是一个非常牛逼的文本编辑器 xff0c 但是他的界面很丑 xff0c 而且在终端下面也不能美化多少 但是 xff01 在windows下有一个叫做gvim的玩意儿 xff0c 在mac下有一个叫macvim的东东
  • 全网最简洁Archlinux 安装教程

    Archlinux 安装教程 先从mirrors ustc edu cn下载archlinux安装镜像 然后下载刻录工具etcher Windows版 xff1a Windows版 Linux版 xff1a Linux版 Mac版 xff1
  • CF6E Exposition题解

    前置知识 st 表 xff1a 用于求静态的区间最值问题 不会的同学可以看wsyear巨佬的这篇文章https blog csdn net wsyear article details 114334351 spm 61 1001 2014
  • 最简单的柯西不等式证明

    柯西不等式证明 柯西不等式 xff0c 是形式如下的不等式 a i 2
  • CF1656E Equal Tree Sums题解

    其实这道题不难 首先假设 1 1 1 是根节点 我看到这道题第一反应就是直接假设整棵树权值之和是某一个定值 xff0c 然后再dfs造每一个 a x
  • CF1656D K-good题解

    这场比赛我没打 xff0c 错失上分好机会 这题是真的水 直接根据题意列出式子 xff1a n 61 k k
  • P7914 [CSP-S 2021] 括号序列 题解

    其实T2想清楚就不是很难 xff0c 虽然想清楚也不简单 我这里分享一种很自然的想法 xff0c 当然是区间dp啦 区间dp分6种状态 的种类数 xff0c 这种情况相当与题目中的 S S S xff0c 2到5中都一样 的种类数 xff0
  • 在Mac上安装好Anaconda,但在终端使用conda命令显示不是有效命令的解决方法

    最近新装的Mac OSX10 15 3 xff0c 新装了anaconda xff0c 从window到Mac的过渡 xff0c 有了诸多不适应 在终端中使用conda命令 xff0c 就会出现以下提示 zsh command not fo
  • LINUX 获取公网ip并发送邮件

    LINUX 获取公网ip并发送邮件 问题由来配置环境本机环境配置源 本段为CSDN博主 Tinghua M 创作编写sh文件 本段参考博主 手动销户了 问题由来 运营商的公网IP是动态的 xff0c 因此造成一段时间后无法访问公司资源 我们
  • Linux查看所有服务的状态

    Ubuntu 16 04环境 查看Linux所有服务的运行状态可输入命令 service status all 注意 xff1a all要紧跟在 status后面 xff0c 中间不要有空格 结果 那么 xff0c 服务名称前面的加减号 4
  • Qt 文件树的实现

    Qt 文件树的实现 xff08 QTreeWidget xff0c QTreeWidgetItem xff09 使用Qt框架创建文件树主要是使用了Qt仲的QTreeWidget控件和QTreeWidgetItem控件 其最主要的功能包括文件
  • chromeOS中Linux安装Flatpak,切换Flatpak数据源,安装Remmina应用

    本文基于ChromeOS 版本106 0 5249 112 xff08 正式版本 xff09 xff0c Debain 11版本 设置 开发者 Linux开发环境 启用 chromebook开启Linux容器 以下内容涉及到的技术均为Deb
  • 性能学习笔记--k8s下mysql的连接数分析和调优

    项目背景 xff1a k8s的架构下 xff0c 登录并发100后 xff0c 发现cpu的利用率过高 xff0c 超过75 xff1b 开始不知道是哪个微服务导致的cpu利用率过高 xff0c 需要进行分析 xff08 最终分析是mysq

随机推荐

  • C++比较函数cmp

    本文将简单介绍C 43 43 比较函数 cmp 排序函数sort sort函数是我们常用的库函数 xff0c 它的参数如下 xff1a span class token keyword void span sort span class t
  • 弹性云服务器ECS的选择:为什么我更推荐华为云?

    前言 作为一名嵌入式开发者 xff0c 平常难免不了需要一台云服务器来搭建一个调试物联网设备的测试平台 x1f604 xff0c 因此平时也没少购买云服务器 xff0c 但是云服务器厂商那么多 xff0c 我们到底应该如何做出选择呢 xff
  • git中忽略所有文件后,白名单中添加文件夹及其所有子文件(夹)

    此点很容易就出问题了 xff0c 我用的想法是要么添加 subfiledir 要么添加 subfiledir 但是按照git的逻辑 xff0c 第一行只会让subfiledir添加进来 xff0c 但是其所有子文件以及文件夹是不会被添加进来
  • 51单片机外部中断

    span class token keyword void span span class token function IrInit span span class token punctuation span span class to
  • 51单片机定时器2用作串口

    使用定时器2用作串口 span class token macro property span class token directive hash span span class token directive keyword defin
  • 二进制的计算(原码、补码以及反码)

    带符号 5 2 0000 0101 gt 5 1000 0010 gt 2 然后两个数据都转为补码进行相加 正数的补码等于原码 负数的补码等于符号位不变 xff0c 剩下的取反加一 算补码的时候符号位不参与计算 0000 0101 43 加
  • iwr6843-ROS构建

    需求 ubuntu 18 04版本 安装ros 安装教程 首先安装必要软件 sudo apt install git curl vim y 设置您的计算机以接受来自 packages ros org 的软件 sudo sh c 39 ech
  • 51nod - 1364 最大字典序排列

    给出一个1至N的排列 xff0c 允许你做不超过K次操作 xff0c 每次操作可以将相邻的两个数交换 xff0c 问能够得到的字典序最大的排列是什么 xff1f 例如 xff1a N 61 5 xff0c 1 2 3 4 5 xff0c k
  • esp8266_贝壳物联_arduino

    功能 接收串口数据 xff0c 将串口数据上报到贝壳物联的数据接口 此处为接收0和1数据 xff0c 上报到贝壳物联 贝壳物联平台通讯协议 ArduinoJson解析 ArduinoJson Assistant非常好用的工具 span cl
  • 简历信息粘贴板

    简历信息粘贴板 gitee链接 x1f602 最近简历投递感觉很麻烦 xff0c 所以想整个这个 xff0c 欢迎体验 有用可以整个 随便也水一个文 xff0c 好久没更了 x1f466 描述 厌倦了麻烦的简历填写了吗 是不是感觉切换查找复
  • Python装饰器简单说明

    Python装饰器 官方定义 装饰器本质上是一个Python函数 其实就是闭包 xff0c 它可以让其他函数在不需要做任何代码变动的前提下增加额外功能 xff0c 装饰器的返回值也是一个函数对象 装饰器用于有以下场景 xff0c 比如 插入
  • cpp装饰器模式

    装饰器模式 结构型模式 xff1a 在不改变现有对象结构的情况下 xff0c 向对象添加新的功能 xff0c 同时不改变其结构 重点在于动态的增加删除功能 xff0c 装饰类和被装饰类独立 xff0c 不会耦合 返回的对象已经不是原来的对象
  • windows新增右键菜单,通过wsl中的vim打开文件

    文章目录 查看wsl打开方式添加右键菜单增加图标效果 非常简单的方式 x1f44d 查看wsl打开方式 可以看到我这里使用ubuntu2004 exe可以打开 添加右键菜单 按下win输入regedit xff0c 在右边选择管理员打开 然
  • iwr6843isk-HARbag

    文章目录 描述说明数据信息使用方法动作类型jumpsquatswavewalkboxingjack iwr6843isk搭建ROS环境雷达配置参数to txt中数据预处理 二阶段滑窗处理 环境 github链接 https gitee co
  • PVE+NUT+群晖等配置

    文章目录 配置文件说明 默认配置 翻译的 ups conf 设置ups通信相关 upsd conf 设置ups客户访问的相关信息 upsd users 设置upsd用户 nut conf nut的配置 主要是模式 xff0c 决定使用哪些文
  • stm32霸道-lvgl移植学习(一)

    文章目录 效果有用链接要求创建工程屏幕驱动以及触屏驱动LVGL PortWidgets demo其它 效果 目前显示驱动显示较慢 xff0c 后续会优化 有用链接 LVGL官网 代码下载 要求 要求最低要求 建议要求架构16 32 64位微
  • E6410安装PVE直通显卡安装LibreELEC系统

    文章目录 查看cpu是否支持直通音频笔记本关盖设定BIOS设定启动内核IOMMU支持添加驱动黑名单绑定核显到vfio模块然后新建一个虚拟机安装LibreELEC注意事项重启 VM 时 GPU 直通失败如果直通后遇到问题了 xff0c 开机出
  • 关于SublimeText3和MinGW安装的一些心得

    本人也是为了学习C 43 43 xff0c 在无意中找到用Sublime Text3和MinGW来进行组合搭建从而完成代码的编译的运行 安装过程期间 xff0c 也出现了一些错误 xff0c 下面就把我的出现的一些错误贴出来 xff0c 看
  • confluence linux 安装教程

    jdk的安装 参考此链接 confluence下载 Confluence官网 linux安装 将下载后的安装包上传到linux系统中 xff0c 并授予权限 xff0c 注意请使用root用户安装 xff0c 否则会出现部分功能无法使用的情
  • Boost库编译指南

    1 Boost 库简介 Boost 是一个开源的 C 43 43 库集合 xff0c 提供了许多高质量的库 xff0c 涵盖了许多不同的领域 xff0c 如智能指针 多线程编程 正则表达式 数学库等等 Boost 的目标是提高 C 43 4