需要编译的boost库
以下的库必须单独编译:
Boost.Chrono | Boost.System |
Boost.Context | Boost.ProgramOptions |
Boost.Filesystem | Boost.Python |
Boost.GraphParallel | Boost.Regex |
Boost.IOstreams | Boost.Serialization |
Boost.Locale | Boost.Signals |
Boost.Log | Boost.Thread |
Boost.MPI | Boost.Timer Boost.Wave |
具有可选的单独编译的一些库:
Boost.DateTime
有一个二进制组件,在使用其to_string/from_string或序列化功能时才需要
Boost.Graph
有一个二进制组件,在您打算分析GraphViz文件时才需要
Boost.Math
具有TR1和C99 cmath函数的二进制组件
Boost.Random
有一个二进制组件,在你使用random device时需要它。
Boost.Test
可以在“仅标题”或“单独编译”模式下使用,虽然单独编译建议严格使用。
Boost.Exception
为32位MSC_VER==1310和_MSC_VER==1400提供了非浸入性的exception_ptr实现,它需要一个单独编译的二进制文件,由BOOST_ENABLE_NON_INTRUSIVE_EXCEPTION_PTR启用
编译步骤:
打开cmd命令窗口,找到boost目录,运行命令:booststrap.bat
命令运行完毕后boost目录产生下列文件:
使用bjam.exe(或b2.exe)来编译boost,这两个exe作用是一样的,bjam.exe是老版本,b2是bjam的升级版本
例如:
bjam stage --toolset=msvc-9.0 --without-python --stagedir="E:\Sdk\boost\bin\vc9" link=static runtime-link=shared runtime-link=static threading=multi debug release
bjam参数说明:
stage/install
stage表示只生成库(dll和lib),install还会生成包含头文件的include目录
--toolset
指定编译器,可选的如borland、gcc、msvc(vc6)、msvc-9.0(vs2008)等。
--stagedir=<stagedir>
存放编译后库文件的路径,默认是stage
--bulid-type=complete
编译所有版本,不然只会编译一小部分版本(相当于:variant=release,threading=multi;link=shared|static;runtime-link=shared)
--without
--with
选择不编译/编译哪些库,如输入--with-regex就只编译regex库,默认是全部编译,显示需要编译的库名称命令bjam --show-libraries.
--build-dir
编译的临时文件会放在builddir里(编译完就可以把它删除了)
link=static|shared
使用静态库还是动态库
threading=single|multi
使用单线程还是多线程库
runtime-link=static|shared
是静态还是动态链接c/c++标准库
例如:
VS2019编译boost_1_70_0
b2.exe install --prefix=“F:\boost_1_70_0\x64” --build-type=complete --toolset=msvc-14.2 link=shared runtime-link=shared runtime-link=static threading=multi debug release
bjam编译:
如果想使用默认配置,则直接在cmd执行以下命令:b2.exe,大约经过30分钟的时间,编译成功如下:
库命名规则说明:
lib:在windows上,只有普通的静态库使用lib前缀;导入库和DLL不使用
boost_XXX:所有boost库名文件以boost_xxx开头
-vc142:toolset标记;标识了构建该库所用的toolset和版本
-mt:threading标记;标识构建该库启用了多线程支持,不支持多线程的库没有-mt。
g:使用标准库和运行时支撑库的调试版本
d:构建代码的调试版本
s:静态链接到C++标准库和编译器运行时支撑库
y:使用Python的特殊调试构建
p:使用STLPort标准库而不是编译器提供的默认库
n:使用STLPort已被弃用的“native iostreams”
-1_67:版本标记;完整的boost发布号,下划线代替点
.lib:扩展名:取决于操作系统,在大多数unix平台上,.a是静态库,.so是共享库。在Windows上,.dll表示共享库,.lib是静态库或导入库。
VS配置库目录:
右键项目-》属性:
指定附加依赖项:
或者使用命令:
#pragma comment(lib, "libboost_date_time-vc142-mt-x32-1_67.lib")