
下载并编译boost库
下载指定的1.57.0版本的boost源代码包,然后构建其“构建工具(bjam或b2)”,再使用后者编译出静态与动态版的boost库,并安装到指定文件夹内。![]()
课前导言
下载并编译boost库
库网址:www.boost.org
下载版本: 1.57.0
订正:视频中说“bjam --show-libraries”用于“查看boost当前包含多少库”。正确的表达是:boost当前包含哪些需要编译的子库(因为有许多子库是直接使用头文件即可)。《白话C++》书中有关这点的表达是正确的。
可能关心的几个问题——
一、为什么叫C++的“准标准库”?
boost是一套开源的C++代码,组织和管理者同样是C++标准委员。许多C++标准库的新功能,来会在boost库中先做实验与验证,包括长时间的试用和改进。并且boost本身也有一套审查机制。许多其它来源的C++库,会经审查后,再进入boost,然后再经长时间使用,条件成熟时再进入C++库。
C++11、14 的正则表达式regex、线程库 thread、时间 chrono,文件系统filesystem……都是先在boost中经多年演练后才修得正果。
二、为什么不使用最新的boost库?
答:boost很庞大,并且一直有新的模块加入,因此版本升级也比较快。哪怕是实际参与C++编程工作的程序员,也都无法全部全学完。初学者应当重点学习boost中比较成熟和常用的库,因此无需一味追新。另外也无需担心自己会学到过时的知识?因为我们所挑选的库,要么比较成熟,变化小,要么就算有变化发展,也很好的延续性保障。
另外,由于新版本的boost库编译方法倒是发生了变化,和书所讲不一致,但编译方法与我们要真正学习知识相比,是一个并不重要的细节,因此我们采用书中所讲的方法。
三、为什么需要静态+动态版,只选一个行吗?
答:也可以,实际工作中,使用动态版或静态版都是可以的。看项目的需要,静态库和动态库的差别和作用,可以在书中《基础》等章节学习。
四、为没有区分“调试”和“发行”版?
答:有的。只是上节课编译wxWidgets时,需要我们手工配置区分,boost自带的构建工具bjam或b2(当然,这个工具也是由我们构建出来),在默认情况下,自行要构建了调试版和发行版,前者的文件名带有-d字样。
五、没有64位的boost版本吗?
当然有!不过,由于我们在《安装并集成mingw-w64编译套件》这节课,在系统范围内配置的编译器路径,是32位的,bjam工具自行检测到这一点,于是自动编译为32位。如果在系统范围内“暴露”的是64位的gcc编译器,则boost也将生成64位版本。
六、最后一个问题:为什么C++的库的都编译得这么长时间啊……
事实上视频作者在录制编译动态版时,已经在公司的躺椅上安详地睡着了……
一是boost的庞大,二是C++语法的复杂性,确实编译时长,三是C++本来就是这个IT世界里的基础设施……基本相当于现实世界中中基建工作。修建高速,打隧道,修跨海大桥……编译时间长点是正常的(通常C++程序员这时候都出门抽烟了)。幸好也就是一次性的,将来用起来就爽了,可谓百年大业,编译开始。