windows 编译C++ boost库

本文详细介绍了如何在Windows上使用Boost1.82.0进行编译,包括下载、配置b2.exe、编译选项(如链接类型、库选择、版本等)以及静态库和动态库的命名规则。
摘要由CSDN通过智能技术生成

一、本次编译的是目前boost版本是: 1.82.0

我们可以先从官网上下载对应版本的boost

二、Windows

windows平台编译boost需要先安装VS,打开命令行工具

这里直接选择的x64命令行工具

然后在命令行中进入这个boost目录文件夹,执行脚本    .\bootstrap.bat

 

 执行完成后,就会在当前目录生成一个可执行文件 b2.exe

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

我们可以运行命令    b2.exe --help   来查看可选的编译选项

 当然,也可以直接运行这个程序  b2.exe

我项目中需要配置的参数所以需要运行这个程序       b2.exe runtime-link=static

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

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

 

三、b2.exe 参数

1、stage/install

 

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

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

2、toolset

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

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

3、without/with

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

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

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

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

4、stagedir/prefix

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

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

5、build-dir

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

6、link

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

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

7、runtime-link

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

8、threading

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

9、variant

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

10、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_82.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_82代表 Boost 1.82版本。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值