一 简言
1. Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一
2. Boost官网地址:http://www.boost.org/
3. 本博客示例所用的版本为boost1.55,版本下载地址为:http://www.boost.org/users/history/version_1_55_0.html
二 Windows下的编译(环境是win7 VS2008)
1. 从上面的boost1.55下载地址下载,windows环境下请下载zip格式的文件,得到压缩包boost_1_55_0.zip
2. 解压得到文件目录boost_1_55_0,笔者这里解压后的boost根目录为H:\boost\boost_1_55_0
3.从“开始菜单”中打开Microsoft Visual Studio 2008的命令行,如下图所示
4. 进入到刚才我们解压的boost跟目录,即H:\boost\boost_1_55_0,方法是:首先输入“H:”,回车,再输入“cd boost\boost_1_55_0”,回车,再输入“bootstrap.bat”,回车,稍等几秒钟即可产生编译工具bjam.exe和b2.exe,如下图所示
5. bjam是专门为boost库设计的编译工具,b2.exe 、bjam.exe 这两个exe作用是一样的,bjam.exe 是老版本,b2是bjam的升级版本
6. 接着输入 bjam stage --toolset=msvc-9.0 --stagedir="H:\boost\boost_1_55_0\vc90" architecture=x86 address-model=32 link=static runtime-link=shared threading=multi debug release --with-system --with-thread --with-date_time ,回车,如下图所示(注意:这里仅编译了指定的库:system, thread, date_time,若想编译全部库,请使用--build-type=complete)
7. 会发现在 H:\boost\boost_1_55_0\vc90\lib目录下已经产生了编译好的库文件,如下图所示
三:Linux下的编译(环境是centos6.8 gcc 4.4.7)
1. 运行命令:yum install gcc gcc-c++ bzip2 bzip2-devel bzip2-libs Python-devel -y 预先安装这些库,因为下面编译boost时会需要,若已安装,安装时会自动跳过,无需担心
2. 定位到/home目录,运行命令:wget https://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.gz/download 从上面的boost1.55下载地址下载压缩包
Linux环境下请下载tar后缀的文件,得到压缩包boost_1_55_0.tar.gz,笔者这里是下载后的路径为:/home/boost_1_55_0.tar.gz
3. 运行命令:tar -zxvf boost_1_55_0.tar.gz 解压到当前目录
4. 运行命令:cd boost_1_55_0 进入刚才的解压出来的目录
5. 运行命令:./bootstrap.sh 产生后面编译所必需的bjam
6. bjam是专门为boost库设计的编译工具,b2 、bjam 这两个可执行程序的作用是一样的,bjam 是老版本,b2是bjam的升级版本
7. 运行命令:./b2 --show-libraries 可以显示所有需要编译的库的名字
8. 运行命令:./b2 stage --toolset=gcc --stagedir="\home\boost_1_55_0\gcc" architecture=x86 address-model=64 link=shared runtime-link=shared threading=multi --with-system --with-thread --with-date_time
9. 稍等十几分钟,即可在目录/home/boost_1_55_0/gcc下看到编译出来的库,如下图所示(注意:上面只编译了指定的三个库,system,thread, data_time,若想编译所有库,去掉后面的--with-选项即可)
下面对上面的bjam的各个参数进行解释说明:
1. stage/install:
stage表示只生成库(dll和lib),install表示附带安装功能,会生成包含头文件的include目录。推荐使用stage,因为install生成的这个include目录实际就是boost安装包解压缩后的boost目录(H:\boost\boost_1_55_0\boost,只比include目录多几个非hpp文件,都很小),所以可以直接使用,而且不同的IDE都可以使用同一套头文件,这样既节省编译时间,也节省硬盘空间
2. toolset:
表示编译器工具,默认自动检测,安装了多个编译器的时候可以使用此属性。可选的如borland、gcc、msvc(VC6)、msvc-12.0(VS2013)、msvc-14.0(VS2015)等,我安装的是VS2008,所以是msvc-9.0(如果你是VS2005,可以使用msvc-8.0 VS2010是msvc-10.0)
3. stagedir/prefix:
stage时使用stagedir,install时使用prefix,表示编译生成文件的路径。推荐给不同的IDE指定不同的目录,例如这里是VS2008对应的是 H:\boost\boost_1_55_0\vc90
如果使用了install参数,那么还将生成头文件目录,vc90 对应的就是 H:\boost\boost_1_55_\boost\bin\vc90\include\boost_1_55_0\boost
4. architecture
表示架构,也就是你的CPU架构,所以是x86
5. address-model
地址长度,32表示编译32位的库文件,64表示编译64位的库文件
6. link
生成动态链接库还是静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用static方式。一般boost库可能都是以static方式编译,因为最终发布程序带着boost的dll感觉会比较累赘
7. runtime-link
动态还是静态链接C/C++运行时库。同样有shared和static两种方式,这样runtime-link和link一共可以产生4种组合方式,各人可以根据自己的需要选择编译
GCC下,在生成动态库(–link=shared)时,就不允许进行静态链接到C运行库(或C++标准库)
8. threading
单线程还是多线程编译。一般都写多线程程序,当然要指定multi方式了;如果需要编写单线程程序,那么还需要编译单线程库,可以使用single方式
9. debug/release:
编译debug/release版本。一般都是程序的debug版本对应库的debug版本,所以两个都编译
10. without/with:
选择不编译/编译哪些库。这里我们指定要编译哪些库,就使用了witth,注意写法:--with-thread --with-date_time,同样,如果不想编译哪些库,可以类似写法--without-thread