Boost
Boost
目录
入门
学习参考
- Boost库学习指南.pdf
- Boost库官方完全翻译最详细教程.pdf(但只有三章)
- Boost程序库完全开发指南:深入C++“准”标准库 第4版.pdf(很厚的一本书、深入)
- Learning Boost C++ Libraries.pdf(没有翻译)
网站
- http://zh.highscore.de/cpp/boost/(主要参考)
- [官方网站](https://www.boost.org/)
- [官网文档](https://www.boost.org/doc/libs/1_78_0/)(推荐从官网主页进入)
下载和编译 Boost
流程简概
Boost C++ 库均带有源代码。其中大多数库只包含头文件,可以直接使用,但也有一些库需要编译。
下载
去官方网站下载,有Unix版本和Windows版本,下载后解压
[官方网站](https://www.boost.org/)
解压
boost_1_78_0
├─ (bin.v2) # 运行b2.exe后生成,文件夹非常大
├─ boost # 里面有各种库
│ ├─ any
│ │ any.hpp
│ └─ ...
├─ doc
├─ libs
├─ more
├─ (status) # 运行b2.exe后生成
├─ status
├─ tools
│ ├─ build/src/engine/b2.exe # 这两个exe文件是一样的,但和根的那个b2.exe不同
│ └─ build/src/engine/bjam.ex # 这两个exe文件是一样的,但和根的那个b2.exe不同
│ (b2.exe) # 运行booststrap之后才会出现这个文件,默认安装再点击这个Build Boost C++ Libraries.
│ boost.css
│ boost.png
│ boost-build.jam
│ boostcpp.jam
│ bootstrap.bat # Windows运行这个编译 bjam
│ bootstrap.sh # Linux运行这个 bjam
│ index.htm
│ index.html
│ INSTALL
│ Jamroot
│ LICENSE_1_0.txt
│ (project-config.jam) # 运行b2.exe后生成
│ README.md
│ rst.css
安装
(听不懂)
为了尽可能容易安装,可以使用 Boost Jam 进行自动安装。无需逐个库进行检查和编译,Boost Jam自动安装整个库集。 它支持许多操作系统和编译器,并且知道如何基于适当的配置文件来编译单个库。
为了在 Boost Jam 的帮助下自动安装,要使用一个名为 bjam 的应用程序,它也带有源代码。 对于某些操作系统,包括 Windows 和 Linux,也有预编译好的 bjam 二进制文件。
为了编译 bjam 本身,要执行一个名为 build 的简单脚本,它也为不同的操作系统提供了源代码。 对于 Windows,它是批处理文件
build.bat
。 对于 Linux,文件名为build.sh
。如果执行 build 时不带任何命令行选项,则该脚本尝试找到一个合适的编译器来生成 bjam。 通过使用命令行开关,称为 toolset,可以选择特定的编译器。 对于 Windows,build 支持 toolsets
vc7
,vc8
和vc9
,可以选择不同版本的 Microsoft C++ 编译器。 要从 Visual Studio 2008 的C++编译器编译 bjam,需要指定命令 build vc9。对于 Linux,支持 toolsetsgcc
和intel-linux
,分别选定 GCC 和 Intel 的C++编译器。应用程序 bjam 必须复制到本地的 Boost 目录 - 不论它是编译出来的还是下载的预编译二进制文件。 然后就可以不带任何命令行选项地执行 bjam,编译并安装 Boost C++ 库。 由于缺省选项 - 在这种情况下所使用的 - 并不一定是最好的选择,所以以下列出最重要的几个选项供参考:
- 声明
stage
或install
可以指定 Boost C++ 库是安装在一个名为stage
的子目录下,还是在系统范围内安装。 "系统范围"的意义取决于操作系统。 在 Windows 中,目标目录是C:\Boost
;而在 Linux 中则是/usr/local
。 目标目录也可以用--prefix
选项明确指出。- 如果不带任何命令行选项执行 bjam,则它会自己搜索一个合适的C++编译器。 可以通过
--toolset
选项来指定一个特定的编译器。 要在 Windows 中指定 Visual Studio 2008 的 Microsoft C++ 编译器,bjam 执行时要带上--toolset=msvc-9.0
选项。 要在 Linux 中指定 GCC 编译器,则要给出--toolset=gcc
选项。- 命令行选项
--build-type
决定了创建何种方式的库。 缺省情况下,该选项设为minimal
,即只创建发布版。 对于那些想用 Visual Studio 或 GCC 构建他们项目的调试版的开发者来说,可能是一个问题。 因为这些编译器会自动尝试链接调试版的 Boost C++ 库,这样就会给出一个错误信息。 在这种情况下,应将--build-type
选项设为complete
,以同时生成 Boost C++ 库的调试版和发布版,当然,所需时间也会更长一些。要用 Visual Studio 2008 的C++编译器同时生成 Boost C++ 库的调试版和发布版,并将它们安装在目录
D:\Boost
中,应执行的命令是 bjam --toolset=msvc-9.0 --build-type=complete --prefix=D:\Boost install. 要在 Linux 中使用缺省目录创建它们,则要执行的命令是 bjam --toolset=gcc --build-type=complete install.其它多个命令行选项可用于指定如何编译 Boost C++ 库的一些细节设定。
我通常在 Windows 下使用以下命令:bjam --toolset=msvc-9.0 debug release link=static runtime-link=shared install.
debug
和release
使得调试版和发布版均被生成。link=static
则只创建静态库。runtime-link=shared
则是指定 C++ 运行时库是动态链接的,这是在 Visual Studio 2008 中对C++项目的缺省设置。
windows下安装和编译(简化版)
- 不要直接双击bootstrap.bat,要在MSVC命令行中调用bat文件。 VS:开始菜单 > Visual Studio 2019 > 找到**Developer Command Prompt...打开 QT:找到Qt 6.0.3 (MSVC 2019 64-bit)**打开 命令行中cd到boost解压路径并执行
bootstrap.bat
(我个人放在了 D:\Soft\Dev\Language\C++\boost_1_78_0) - 然后依然是在MSVC命令行中调用
bjam.exe
Bjam参数
bjam install # stage/install:stage只生成库、install还会生成包含头文件的include目录,但编译时间更长。默认stage
--toolset=msvc-14.0 # 指定编译器,可选的如borland、gcc、msvc-14.0(VS2025)等
--without-python # --build-type/without/with:complete编译所有boost库,默认complete。without/with选择不编译/编译哪些库 查看boost包含库的命令是bjam --show-libraries
--prefix="E:\Learning\Boost"# --stagedir/prefix:stage时用stagedir,install时用prefix。表示编译生成文件的路径
link=static # 生成动态/静态链接库。参数static仅生成lib文件,参数shared生成lib和dll文件
runtime-link=shared # 动态/静态链接C/C++运行时库。参数static或shared
threading=multi # 单/多线程编译。现在基本都是multi方式
address-model=64 # 64/32位平台,不填就都编译
debug # debug/release,不填就都编译
不知道为什么,--prefix参数似乎不管用
- install命令生成在
C:\Boost
,里面有include和lib文件 - stage命令生成在
D:\Soft\Dev\Language\C++\boost_1_78_0\stage
,里面只有lib文件
库的概述
Boost C++ 库的 1.42.0 版本包含了超过90个库,中文站中只详细讨论了以下各库:
Boost C++ 库 C++ 标准 简要说明 Boost.Any Boost.Any 提供了一个名为 boost::any
的数据类型,可以存放任意的类型。 例如,一个类型为boost::any
的变量可以先存放一个int
类型的值,然后替换为一个std::string
类型的字符串。Boost.Array TR1 Boost.Array 可以把 C++ 数组视同 C++ 标准的容器。 Boost.Asio TR2 Boost.Asio 可用于开发异步处理数据的应用,如网络应用。 Boost.Bimap Boost.Bimap 提供了一个名为 boost::bimap
的类,它类似于std::map
. 主要的差别在于boost::bimap
可以同时从键和值进行搜索。Boost.Bind TR1 Boost.Bind 是一种适配器,可以将函数作为模板参数,即使该函数的签名与模板参数不兼容。 Boost.Conversion Boost.Conversion 提供了三个转型操作符,分别执行向下转型、交叉转型,以及不同数字类型间的值转换。 Boost.DateTime Boost.DateTime 可用于以灵活的格式处理、读入和写出日期及时间值。 Boost.Exception Boost.Exception 可以在抛出的异常中加入额外的数据,以便在 catch
处理中提供更多的信息。 这有助于更容易地调试,以及对异常情况更好地作出反应。Boost.Filesystem TR2 Boost.Filesystem 提供了一个类来处理路径信息,还包含了几个访问文件和目录的函数。 Boost.Format Boost.Format 以一个类型安全且可扩展的 boost::format
类替代了std::printf()
函数。Boost.Function TR1 Boost.Function 简化了函数指针的定义。 Boost.Interprocess Boost.Interprocess 允许多个应用通过共享内存以快速、高效的方式进行通信。 Boost.Lambda Boost.Lambda 可以定义匿名的函数。 代码被内联地声明和执行,避免了单独的函数调用。 Boost.Multiindex Boost.Multiindex 定义了一些新的容器,它们可以同时支持多个接口,如 std::vector
和std::map
的接口。Boost.NumericConversion Boost.NumericConversion 提供了一个转型操作符,可以安全地在不同的数字类型间进行值转换,不会生成上溢出或下溢出的条件。 Boost.PointerContainer Boost.PointerContainer 提供了专门为动态分配对象进行优化的容器。 Boost.Ref TR1 Boost.Ref 的适配器可以将不可复制对象的引用传给需要复制的函数。 Boost.Regex TR1 Boost.Regex 提供了通过正则表达式进行文本搜索的函数。 Boost.Serialization 通过 Boost.Serialization,对象可以被序列化,如保存在文件中,并在以后重新导入。 Boost.Signals Boost.Signal 是一个事件处理的框架,基于所谓的 signal/slot 概念。 函数与信号相关联并在信号被触发时自动被调用。 Boost.SmartPoiners TR1 Boost.SmartPoiners 提供了多个智能指针,简化了动态分配对象的管理。 Boost.Spirit Boost.Spirit 可以用类似于 EBNF (扩展巴科斯范式)的语法生成词法分析器。 Boost.StringAlgorithms Boost.StringAlgorithms 提供了多个独立的函数,以方便处理字符串。 Boost.System TR2 Boost.System 提供了一个处理系统相关或应用相关错误代码的框架。 Boost.Thread C++0x Boost.Thread 可用于开发多线程应用。 Boost.Tokenizer Boost.Tokenizer 可以对一个字符串的各个组件进行迭代。 Boost.Tuple TR1 Boost.Tuple 提供了泛化版的 std::pair
,可以将任意数量的数据组在一起。Boost.Unordered TR1 Boost.Unordered 扩展了 C++ 标准的容器,增加了 boost::unordered_set
和boost::unordered_map
.Boost.Variant Boost.Variant 可以定义多个数据类型,类似于 union
, 将多个数据类型组在一起。 Boost.Variant 比union
优胜的地方在于它可以使用类。