windows 编译C++ boost库(超详细)

news2024/9/27 17:24:23

系列文章目录

文章目录

  • 系列文章目录
  • 前言
  • 一、windows
  • 二、b2.exe 参数


前言

boost库其实不进行编译,大部分库也是可以正常使用的

而且也有一个开源工具vcpkg可以帮组我们下载编译,只是在国内用起来比较麻烦,而且还时常出bug

所以这里详细记录一下boost库的编译过程

首先需要下载源代码:boost下载

下载好对应的版本后,解压即可

本次编译的是目前boost最新版本: 1.81.0

一、windows

windows平台编译boost,需要先安装好vs,然后打开vs的命令行工具

在这里插入图片描述
我这里直接选择的x64命令行工具

然后在命令行中进入这个文件夹,执行脚本:

.\bootstrap.bat

在这里插入图片描述

执行完成后,就会在当前目录生成一个可执行文件 b2.exe
在这里插入图片描述

后面就是通过这个可执行文件来编译源代码的

我们可以运行命令:

b2.exe --help

来查看可选的编译选项:
在这里插入图片描述
当然,你可以直接运行这个程序即可:

b2.exe

编译好后,其默认的安装路径为当前目录下的stage\lib文件夹内

而头文件就在下载当前目录的boost目录里面

在这里插入图片描述

使用的时候,直接在vs项目的环境路径中添加即可:

在这里插入图片描述

二、b2.exe 参数

  • stage/install
    在这里插入图片描述

stage 表示只生成库(dlllib),install 还会生成包含头文件的 include 目录。推荐使用 stage,因为 install 生成的 include 目录实际就是源码包下的 boost 目录,需要 include 的时候可以直接使用,不需要再次生成,这样可以节省大量的编译时间。

事实上其默认就是这个选项,所以这两个选项不用填

  • toolset

指定编译器,可选的如 borlandgccmsvc-14.3(VS2022)等。如果不指定,会自动搜索本地可用的编译器(可查看 ./project-config.jam 文件以确认)。

因此这个也不用填,其会自动搜索的

  • without/with

选择不编译/编译哪些库(类似于黑名单/白名单)。--with-python 的含义是仅编译 python,其他的都不编译。反过来,如果用 --without-python,意思就是除了 python, 其他的都编译。with/without 参数可以多次出现,以限定多个库。如果不设置 with/without 参数,默认全部编译!

需要注意,编译 Boost.python 需要确保本地安装了 Python,并且 python 命令已加入环境变量。

要查看 Boost 包含的所有库,可使用命令:b2.exe --show-libraries

所以默认也不用管,直接全部编译即可

  • stagedir/prefix

当用stage 命令时使用 stagedir,而install 时使用 prefix,表示编译生成文件的路径。

默认不填就是用的stage命令,所以可以设置stagedir值,以自定义保存库的路径,不指定路径,默认为./stage目录下

  • build-dir

编译生成的中间文件的路径,默认是 Boost 根目录下的 bin.v2 目录,一般无需设置。

  • link:

指定生成动态链接库还是静态链接库,取值为 static|shared。生成静态链接库使用 static,生成动态链接库需使用 shared。如不指定,默认使用 static

静态库的缺点是占用空间比较大,优点是程序发布的时候无需附带 Boost 库的 dll,比较整洁。推荐使用静态库的方式编译,即默认即可,不用填

  • runtime-link

指定运行时是动态还是静态链接C/C++运行时库。同样有 sharedstatic 两种方式。如果不指定,默认是 shared,一般无需设置,默认即可

  • threading

要编译的库是单线程还是多线程,可取值 single|multi。如果不指定,默认是 multi,一般无需设置。

  • variant

可选值为:debug|release,编译 debug 版本还是 release 版本。如果不指定,默认两个都编译,一般无需设置,都编译即可

  • address-model

编译成 32 位版本还是 64 位版本,可取值 32|64。如果不指定,默认两个版本都编译。

  • Boost 静态库/动态库的命名规则

Boost.atomic为例,如果编译的是静态库(link=static),将会生成单个 .lib 文件:

libboost_atomic-vc143-mt-gd-x64-1_81.lib

而如果编译的是动态库(link=shared),将会生成两个文件(.lib.dll):

libboost_atomic-vc143-mt-gd-x64-1_81.lib
libboost_atomic-vc143-mt-gd-x64-1_81.dll

动态库虽然也生成 .lib 文件,但它与静态库的 .lib 文件差别很大。动态库的 .lib 更像是对 .dll 的声明,二者的关系类似于 .h.cpp 的关系。因此,动态库中的 .lib 文件要比静态库的 .lib 文件小得多。

下面以静态库的命名规则为例进行分析:

libboost_atomic-vc143-mt-gd-x64-1_81.lib
|   ||     | |    | |  | || |||  ||   
-  ---     ----   ---  - --  --  --   
1   2       3      4   5  6   7   8   
  1. 静态库以 lib 开头,动态库开头没有 lib
  2. 所有的库都含有 boost 前缀。
  3. 库名称,本例中为 atomic
  4. 编译器名称及其版本,vc143指的是 msvc-14.3,对应 Visual Studio 2022
  • Visual Studio 2022-14.3
  • Visual Studio 2019-14.2
  • Visual Studio 2017—14.1
  • Visual Studio 2015—14.0
  • Visual Studio 2013—12.0
  • Visual Studio 2012—11.0
  • Visual Studio 2010—10.0
  • Visual Studio 2008—9.0
  • Visual Studio 2005—8.0
  • Visual Studio .NET 2003—7.1
  • Visual Studio .NET—7.0
  • Visual Studio 6.0, Service Pack 5–6.5
  1. mt 代表 threading=multi,没有则代表 threading=single
  2. gd 代表 debug 版本,没有则代表 release 版本。 如果为sgd,前面的s 代表 runtime-link=static,没有则代表 runtime-link=shared
  3. 目标位数,x32 代表 32 位,x64 代表 64 位。
  4. Boost 库的版本号,1_81代表 Boost 1.81版本。

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

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

相关文章

mac下,使用 docker 搭建,单机机器集群

背景: 在 Mac本下,通过 docker 完成一个 es 集群(3台-或许可多台)搭建。(后续如果有真实的机器,只需要又该对应的 ip 地址即可,需要关注的是,机器间是可以互相 ping通的,…

4.3.5、IPv4 地址的应用规划

给定一个 IPv4 地址块,如何将其划分成几个更小的地址块,并将这些地址快分配给互联网中的不同网络, 进而可以给各网络中的主机和路由器接口分配 IPv4 地址。 一般有两种方法: 定长的子网掩码 FLSM (Fixed Length Sub…

线程,进程以及Java中创建线程的多种方式

1. 前言 今天的这篇文章的目的还是为了讲述下什么叫线程,什么是进程。可能之前很多人都是通过背书得来的,今天就从通俗易懂的角度来分析下 2. 适合人群 线程以及进程的初学者 3. 开始 3.1 什么是程序 其实不管是程序/ 进程/ 线程都是基于操作系统而言…

141.环形链表

给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(…

SuperMap iDesktop地质体模型匹配地形——精修地质体模型路线

作者:超图研究院技术支持中心-于丁 地质体模型匹配地形——精修地质体模型路线 相信大家开展地质体业务时,常常会遇到构建的精模地质体与DEM地形数据的交界面,嵌合效果不佳、相互压盖、渲染冲突不稳定(闪面)、掩盖、漂…

前端期末考试试题及参考答案(03)

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 一、 填空题 transition属性中______规定应用过渡的CSS属性的名称。transition属性中______定义过渡效果花费的时间。transition属性中______属性规定过渡效果的时间曲线。…

GitHub入门指南(上)

前言 我去年入门 GitHub,一开始不知道从哪开始学,在网上查找了很多文章、教程学习。这篇文章就是以我刚学习时的小白视角写的,希望能帮助到想开始学习 GitHub 又不知如何上手的学习者。因为我也是初级水平,文中介绍的知识基于我自…

6.移动端布局-rem布局

1.rem基础 优点:可以通过修改html里边文字的大小来改变页面中其他元素的大小,可以实现整体控制 1.1 rem单位 rem(root em)是一个相对单位,类似于em。 em是相对于自身元素字体大小(若自身没有设置font-size则基础父元素的字体大…

一次SQL调优 聊一聊 SQLSERVER 数据页

一:背景 1.讲故事 最近给一位朋友做 SQL 慢语句 优化,花了些时间调优,遗憾的是 SQLSERVER 非源码公开,玩起来不是那么顺利,不过从这次经历中我觉得明年的一个重大任务就是好好研究一下它,争取在 SQLSERVE…

uniapp实现音频播放抢占系统音频焦点

项目为使用uniapp框架开发的Android/iOS APP应用 实现功能需求 假设手机正在播放音乐,当前APP处于前台收到消息,需播放提示音提示用户。目标为降低后台正在播放音乐的音量,播放提示音,播放完毕后恢复后台音乐音量 需求分析 乍…

拉伯证券|新能源汽车前11月产销翻倍,渗透率升至三分之一

2022年11月,国内新能源轿车渗透率已升至33.8%,创前史新高。 2022年的最终一个交易日早盘,两市高开高走,沪指涨0.61%,深证成指涨0.35%,创业板指涨0.3%。板块上来看,Web3.0、虚拟人、网络游戏概念…

BI技巧丨RankxYoY

群友:PowerBI可以实现两年的排名差异么? 白茶:可以!安排! 本期的问题,来自于群内小伙伴的一个实际应用场景。在实际业务中,这个需求属于常见类型,展示当前排名时,用户关注…

【软件测试】 测试开发?看看一线大厂需求的测试开发技能......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 能在一线大厂工作是…

FPGA知识汇集-FPGA系统时序理论

时序约束条件 下面来具体讨论一下系统时序需要满足的一些基本条件。我们仍然以下图的结构为例,并可以据此画出相应的时序分析示意图。 在上面的时序图中,存在两个时序环,我们称实线的环为建立时间环,而虚线的环我们称之为保持时间…

Java死锁

一.死锁是什么? 死锁指两个或者两个以上的线程在执行过程中,去争夺同样一个共享资源,造成的相互等待的现象,如果没有外部干预,线程会一直阻塞,无法往下执行,这样一直处于相互等待资源的线程叫做…

极米Z6X Pro怎么样?极米Z6X Pro亮度如何?极米Z6X Pro值得入手吗?

投影仪不知怎么选?不妨看看极米Z6X Pro,半山黛青的全新配色下,是仅有5.3cm的轻薄机身,1.4kg的重量,一只手就可以轻松拿取。相比同价位的投影产品,极米Z6X Pro摆放方便又不占地,外观时尚精致&…

Go Map

Go Map map 是一种key-value的键值对存储结构,其中key不能重复,无序。底层是hmap结构,hmap中维护buckets(bmap结构)。结构定义 type hmap struct {count int // 元素个数B uint8 // buckets已扩容的次数,buckets长…

JVM-Java内存区域

1、运行时数据区域 运行时数据区域:程序计数器、Java虚拟机栈、本地方法栈、堆、方法区。 非运行时数据区域:直接内存。 (1)程序计数器 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制。在多线…

谷歌2022年最受欢迎Chrome浏览器扩展程序:包含Tango,Compose AI等

根据截图排序从左到右依次介绍如下: RoPro:Roblox.com网站体验增加了许多有用且独特的功能; MyBib:自动创建 APA 样式、MLA 格式和哈佛引用样式引文; eJOY English:翻译自Netflix, Youtube, iFlix上的字…

Codeforces Round #841 (Div. 2) and Divide by Zero 2022(A-D)

Codeforces Round #841 (Div. 2) and Divide by Zero 2022(A-D) 题目链接限制AJoey Takes Moneystandard input/output1 s, 256 MBBKill Demodogsstandard input/output1 s, 256 MBCEven Subarraysstandard input/output2.5 s, 256 MBDValiant’s New M…