Window 编译Boost库
1.使用b2编译Boost库
首先下载boost源代码
下载好之后进入到目录。运行bootstrap.bat
运行时后面可以接已经存在于本地的编译器,默认是msvc,可以在 bootstarp.bat 上看到
也可以指定自己的编译器。
1 | SET TOOLSET=msvc |
执行后得到
b2.exe(新版构建工具,现在一般只有这个)
project-config.jam(项目配置文件)
如果需要使用msvc 编译需要下载visual studio 工具。不过官网页提供了现成的msvc版本的boost库,安装即可使用
如果使用gcc 需要下载msys + mingw工具。
以下是编译相关参数
| 参数 | 可选值 | 作用说明 |
|---|---|---|
--prefix=<path> |
路径 | 安装目录前缀,决定 include / lib / share 生成在哪 |
--build-dir=<path> |
build 路径 | 中间构建目录(obj、临时文件) |
--with-<lib> |
如 context |
只编译指定库 |
--without-<lib> |
如 python |
排除某些库 |
install |
固定命令 | 编译并安装 |
stage |
固定命令 | 只编译,不安装 |
| 参数 | 可选值 | 说明 |
|---|---|---|
variant |
debug / release |
编译类型 |
debug-symbols |
on / off |
是否生成调试符号 |
| 参数 | 可选值 | 说明 |
|---|---|---|
link |
static / shared |
生成静态库或动态库 |
runtime-link |
static / shared |
C++ 运行库链接方式 |
threading |
single / multi |
单线程 / 多线程版本 |
| 参数 | 可选值 | 说明 |
|---|---|---|
toolset |
msvc / gcc / clang |
编译器 |
architecture |
x86 / x86_64 |
CPU 架构 |
address-model |
32 / 64 |
32 / 64 位 |
cxxstd |
11 / 14 / 17 / 20 |
C++ 标准 |
define= |
宏 | 预定义宏 |
| 参数 | 作用 |
|---|---|
install |
触发安装(才会有 include / lib) |
--prefix= |
include / lib / share 的根目录 |
--includedir= |
单独指定头文件目录 |
--libdir= |
单独指定库目录 |
1 | .\b2.exe -j%NUMBER_OF_PROCESSORS% toolset=gcc target-os=windows address-model=64 variant=debug,release link=shared runtime-link=shared threading=multi --with-context --layout=versioned --build-dir=D:\3rdparty\context\build --prefix=D:\3rdparty\context install |
以上编译出动态库指令。
只需要修改 --with- 修改为自己需要的库。要注意修改--build-dir 和 prefix两个文件夹
需要静态库时只需要修改link = static
一些具体参数可以去官网查看
在 Boost 中,例如boost::stacktrace 等 并不是一个单一实现的库,而是一个统一接口。
根据不同的平台、编译器和符号解析方式,Boost 提供了多种后端实现(backend)。
这些后端在 CMake 中体现为不同的 imported targets,例如
Boost::stacktrace_windbgBoost::stacktrace_windbg_cachedBoost::stacktrace_backtraceBoost::stacktrace_addr2lineBoost::stacktrace_basicBoost::stacktrace_noop
我们可以根据需要,编译出适合程序的库。具体有什么可以去Boost Libraries查看。不过b2编译器会根据平台编译出最适合的实现。
例如我们在window直接执行如下命令
1 | .\b2.exe -j%NUMBER_OF_PROCESSORS% toolset=gcc target-os=windows address-model=64 variant=debug,release link=shared runtime-link=shared threading=multi --with-context --layout=versioned --build-dir=D:\3rdparty\context\build --prefix=D:\3rdparty\context install |
只能得到stacktrace_form_exception 、stacktrace_noop、stacktrace_windbg_cached、stacktrace_windbg四个实现。
1 | .\b2.exe -j%NUMBER_OF_PROCESSORS% toolset=gcc target-os=windows address-model=64 variant=debug,release link=shared runtime-link=shared threading=multi --with-stacktrace --layout=versioned --build-dir=D:\3rdparty\stacktrace\build --prefix=D:\3rdparty\stacktrace boost.stacktrace.addr2line=on boost.stacktrace.windbg=off install |
执行如上命令会编译出stacktrace.addr2line(虽然大概率编译失败)。
2.使用cmake 编译 boost库(更现代,更简单)
推荐使用vscode + cmake 来编译。
cmake 版本下载链接 boost1.90 github下载
首先确保自己电脑上安装了cmake,我使用的是cmake 3.31.6版本。理论上3.8+版本都可以。
Windows下CMake 安装攻略(详细图文教程)_cmake安装windows-CSDN博客
配置好了cmake,并且将代码下载下来之后,解压缩代码。
创建build文件夹并且进入build文件夹
1 | mkdir build; cd build |
接下来执行
1 | cmake -S . -B build -G "MinGW Makefiles" -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=D:/boost-shared-install -DCMAKE_BUILD_TYPE=RelWithDebInfo |
这里的 -G 用来选择生成器。MinGW Makefiles 选用的是MinGW,Visual Studio 17 2022就使用的msvc
要注意的是MinGW Makefiles是单配置生成器,只能生成debug 或 release或其他的一种,而Visual Studio 17 2022是多配置生成器,可以一口气生成完整的debug + release版本的boost库
DBUILD_SHARED_LIBS: 是否生成动态库
DCMAKE_INSTALL_PREFIX: 安装路径
DCMAKE_BUILD_TYPE: 构建类型,包括Debug、Release、MinSizeRel、RelWithDebInfo
然后执行如下命令,得到编译完成的产物
1 | cmake --build build -j |
执行如下命令,就会安装完整的boost库, —prefix 指定安装目录(也可以用前面配置过的安装路径。如果没有配置过使用这个)
1 | cmake --install build --prefix D:/myinstall |
1 | cmake -S . -B build -G "MinGW Makefiles" -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=D:/boost-shared-install -DCMAKE_BUILD_TYPE=RelWithDebInfo |
下面是两种编译方式的一个区别:
使用b2 编译难度会略大一些,因为编译参数比较多,但是可以生成指定的boost库。
使用cmake编译难度小很多,体验下来速度也相应的快很多,但是使用MinGW Makefile编译一次只能生成debug 或 release版本(可以生成RelWithDebInfo 版本,兼顾了debug的调试以及release的优化,但是体积较大,可能需要修改Cmake代码)。
生成 RelWithDebInfo 版本报错FAILED: stage/bin/libboost_cobalt_io.dll stage/lib/libboost_cobalt_io.dll.a解决:
在 libs/cobalt/CMakeLists.txt 添加如下
=
1 | target_link_libraries(boost_cobalt_io PRIVATE bcrypt mswsock ) |
在执行cmake 时,编译选项添加如下
1 | -DBOOST_STACKTRACE_ENABLE_FROM_EXCEPTION:BOOL=OFF |


