必须先运行 bootstrap.bat 生成 b2.exe 并写入 project-config.jam 以探测 vs 版本(如 vc143),否则编译失败;b2 编译需严格匹配 link=static/shared、runtime-link=static/shared、threading=multi 等参数,否则链接或运行时报错。

必须用 b2,不能用 CMake;跳过 bootstrap.bat 就编译失败。
运行 bootstrap.bat 是强制前置步骤
它不光生成 b2.exe,还会探测当前 Visual Studio 版本(比如自动识别 vc143 对应 VS 2022),并写入 project-config.jam。如果直接双击没反应,或报错 Failed to build Boost.Build engine,说明:
– 没装对应版本的 Visual Studio Build Tools
– 或环境变量 VSINSTALLDIR 没设对
– 或你机器上装了多个 VS(如 VS 2019 + VS 2022),但想指定旧版:先手动调用对应 vcvars64.bat,再运行 bootstrap.bat
b2 编译命令里最关键的三个参数
库名后缀(如 libboost_filesystem-vc143-mt-x64-1_85.lib)每个字段都由这些参数决定,写错一个就链接失败:
-
link=static:生成纯.lib,代码全打进你的可执行文件;link=shared:生成.dll+ 导入库,运行时得带 DLL -
runtime-link=static:静态链接 CRT(libcmt.lib),目标机器不用装 VC++ 运行库;runtime-link=shared(默认):动态链接msvcp140.dll,部署时得配套分发 -
threading=multi:启用线程安全——几乎所有 Boost 库(filesystem、system、thread)都要求这个;threading=single基本只用于嵌入式极简场景,多数库会直接禁用
常见编译命令示例和坑点
以下命令适用于 VS 2022(vc143)、x64、静态 CRT、多线程、只编译 filesystem 和 system:
b2 -a -j12 --build-type=complete --stagedir=stage vc143 link=static runtime-link=static threading=multi --with-filesystem --with-system
注意几个易错点:
-
--with-filesystem不等于#include <boost></boost>能用——filesystem必须显式编译,否则链接时报LNK2001: unresolved external symbol - 别漏掉
system库:它是filesystem的隐式依赖,b2会自动拉,但如果你用--without-system就直接崩 -
stage和install区别很大:stage只放lib到stage/lib;install会拷贝头文件到prefix/include/boost,但实际没必要——你源码里#include <boost></boost>本来就是直接引用解压后的boost/目录 - 想查哪些库必须编译?运行
b2 --show-libraries,输出里标built的才需要你动手,像algorithm、container这类纯头文件库根本不用编
最常被忽略的是:threading=multi 和 runtime-link 的组合必须和你自己项目的 CRT 设置一致。项目用 /MTd 编译却链接了 runtime-link=shared 的库,或者反过来,都会在运行时报错甚至静默崩溃。











