![Boost程序库完全开发指南:深入C++”准”标准库(第5版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/394/31186394/b_31186394.jpg)
1.2 开发环境
阅读本书和使用Boost,读者需要一个能够较好地支持C++标准的操作系统和编译器,之后才能编译和安装Boost程序库。
C++是一种大型语言,十分复杂。虽然C++98标准已经面世二十余年,C++11标准也已经出台近十年,但仍然有很多编译器未能实现C++的全部特性。
由于Boost大量使用了C++的高级特性,所以并非所有的编译器都能够很好地支持Boost,并且每个组件对编译器的支持都不尽相同。虽然Boost已经针对平台和编译器的兼容性做了大量的工作,但仍有可能出现意外情况。随着Boost版本的增长,某些过“老”的编译器(如VC 6、VC 7、GCC 3)和CPU已经不再被支持。
在编写本书时,作者使用的操作系统是Ubuntu 18.04.1,编译器使用的是其自带的GCC 7.4.0,所有代码均在此环境中编译通过。
1.2.1 快捷安装
在Linux操作系统下安装Boost很容易,最简单省事的方法是在Boost解压缩后的目录下直接执行以下命令:
./bootstrap.sh;./b2 install
第一条命令bootstrap.sh是编译前的配置工作,第二条命令才开始真正地编译并安装Boost。
如果像上面这样不指定额外选项,Boost将编译release版本的库文件,把头文件安装到“/usr/local/include”中,把库文件安装到“/usr/local/lib”中。
1.2.2 完全安装
我们也可以完整编译Boost,使用buildtype选项指定编译类型(如不指定编译类型则默认使用release模式),在执行bootstrap.sh命令之后执行如下命令:
![](https://epubservercos.yuewen.com/BABF75/16896238004365306/epubprivate/OEBPS/Images/38534_39_1.jpg?sign=1739003329-FjflSshVOFerxQJKENXFklk8vT4Vzzoo-0-bb1b58c1b714a2328df0030ce60a1f7b)
这样将开始对Boost进行完整编译,安装所有调试版、发行版的静态库和动态库。
1.2.3 定制安装
完整编译Boost费时费力,而且在开发过程中这些库并不会全部用到,因此,Boost允许用户自行选择用户要编译的库。
执行命令:
./b2--show-libraries
可查看所有必须编译后才能使用的库。
在完全编译命令的基础上,使用--with或--without选项可打开或关闭某个库的编译,如:
./b2--with-date_time--buildtype=complete install
执行上述命令将编译安装date_time库。
本书使用的安装命令如下:
![](https://epubservercos.yuewen.com/BABF75/16896238004365306/epubprivate/OEBPS/Images/38534_39_2.jpg?sign=1739003329-nU7TQ472Sli0TFw9OyKwUotwK4UWFkqQ-0-db64bacc835138ae81a2949838fffe6f)
b2和bootstrap.sh还有很多其他选项,如指定安装路径、指定debug或release版等,读者可以使用--help选项或参考Boost文档以获得更多的信息。
1.2.4 编译验证
让我们来编写一个简单的Boost应用程序来验证其开发环境。
头文件<boost/version.hpp>里有两个宏,这两个宏定义了当前使用的Boost程序库的版本号:
![](https://epubservercos.yuewen.com/BABF75/16896238004365306/epubprivate/OEBPS/Images/38534_39_3.jpg?sign=1739003329-Gv6NDQteGlnRnhATcfGxVJEVzsq20PGO-0-f4f761f0db835110f1a394c1d6333751)
头文件<boost/config.hpp>里的三个宏:BOOST_PLATFORM、BOOST_COMPILER和BOOST_STDLIB,分别定义了当前的操作系统、编译器和标准库。
下面的代码就是我们与Boost的第一次接触(见GitHub仓库的common/test.cpp):
![](https://epubservercos.yuewen.com/BABF75/16896238004365306/epubprivate/OEBPS/Images/38534_40_1.jpg?sign=1739003329-2z68xgqLLn2GEhrHjOZOBAFnyQcHFMjx-0-5d1a7fead46dc77efd915d793ffbd20b)
然后使用g++编译:
![](https://epubservercos.yuewen.com/BABF75/16896238004365306/epubprivate/OEBPS/Images/38534_40_2.jpg?sign=1739003329-szsp72z5pBFE44dck4M9eHY5FfbedPxT-0-f1aaf5172466326da66c33dd9894f21f)
程序的运行结果如下:
![](https://epubservercos.yuewen.com/BABF75/16896238004365306/epubprivate/OEBPS/Images/38534_40_3.jpg?sign=1739003329-u7h1AWZKXpsCfnFqe4ECIgg4v3XfdjfR-0-662f259988fe45386eabbbafd3d04888)