分类: C/C++
2012-04-02 18:32:50
vs2008编译boost
【一、Boost库的介绍】
Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。
Boost库中比较有名的几个库:
(1)Regex,正则表达式库;
(2)Spirit,LL parser framework,用C++代码直接表达EBNF;
(3)Graph,图组件和算法;
(4)Lambda,在调用的地方定义短小匿名的函数对象,很实用的functional功能;
(5)concept check,检查泛型编程中的concept;
(6)Mpl,用模板实现的元编程框架;
(7)Thread,可移植的C++多线程库;
(8)Python,把C++类和函数映射到Python之中;
(9)Pool,内存池管理;
(10)smart_ptr,智能指针。
【二、Boost库的编译】
【Setp1 准备工作】:
(1)Boost 下载可以到官方网站下载:
(2)安装VS2008 IDE
【Setp2 编译Boost】
1.打开Visual Studio 2008 命令提示窗口
2.进入D:/05_Computer/04_3rdPatry/02Boost/boost_1_44_0/boost_1_44_0/tools/jam/src
3.执行 build.bat 会在D:/05_Computer/04_3rdPatry/02Boost/boost_1_44_0/boost_1_44_0
/tools/jam/src/bin.ntx86 生成 bjam.exe文件.
4.Copy bjam.exe 文件到 D:/05_Computer/04_3rdPatry/02Boost/boost_1_44_0/boost_1_44_0 下
6.进入D:/05_Computer/04_3rdPatry/02Boost/boost_1_44_0/boost_1_44_0 目录
7.执行bjam.exe 编译命令,如下:
(1)编译所有boost动态库 (release|debug),包括头文件和库文件
bjam --toolset=msvc-9.0 --prefix=D:/05_Computer/04_3rdPatry/02Boost/boost_1_44_0/output --without-python --build-type=complete link=shared threading=multi install
(2)只编译 release 版本 regex 动态库,包括头文件和库文件
bjam --toolset=msvc-9.0 --prefix=D:/05_Computer/04_3rdPatry/02Boost/boost_1_44_0/output1 --with-regex link=shared threading=multi variant=release runtime-link=shared install
(3)只编译 release 版本 regex 动态库,包括库文件
bjam --toolset=msvc-9.0
--stagedir=D:/05_Computer/04_3rdPatry/02Boost/boost_1_44_0/output2
--with-regex link=shared threading=multi variant=release runtime-link=shared stage
【注意】: Boost 源代码所在路径最好全英文,不要有空格、特殊字符、中文等
编译要花上30分钟左右(根据PC性能所定), 会在指定生成目录:
D:/05_Computer/04_3rdPatry/02Boost/boost_1_44_0/output下生成对应库文件和头文件。
8.设置开发环境
打开VS2008 创建工程, 配置工程属性
设置包含文件目录F:/Develop/BoostlibAndDll/include/boost-1_37/boost
设置引用文件目录:F:/Develop/BoostlibAndDll/lib
完成后,可以使用。
【三、介绍Bjam使用】
Usage:
Bjam [options] [properties] [install|stage]
install Install headers and compiled library files to the
======= configured locations (below).
在“--prefix=”指定的目录下生成所有头文件
(boost源代码下boost文件夹下所有文件)和指定库文件
--prefix=
Default; C:/Boost on Win32
Default; /usr/local on Unix. Linux, etc.
--exec-prefix=
Default;
--libdir=
Default;
--includedir=
Default;
stage Build and install only compiled library files
====== to the stage directory.
在“--stagedir=”指定的目录下生成指定库文件
--stagedir=
Default; ./stage
【Other Options】:
--build-type=
of the libraries. Note, that which variants get
built depends on what each library supports.
minimal (default) - Builds the single
"release" version of the libraries. This
release corresponds to specifying:
"release
static
Build variant to build.
complete - Attempts to build all possible
variations.
--build-dir=DIR Build in this location instead of building
within the distribution tree. Recommended!
--show-libraries Displays the list of Boost libraries that require
build and installation steps, then exit.
--layout=
and header locations such that multiple
versions of Boost or multiple compilers can
be used on the same system.
versioned (default) - Names of boost
binaries include the Boost version
number and the name and version of the
compiler. Boost headers are installed
in a subdirectory of
name contains the Boost version number.
system - Binaries names do not include
the Boost version number or the name
and version number of the compiler.
Boost headers are installed directly
into
intended for system integrators who
are building distribution packages.
--buildid=ID Adds the specified ID to the name of built
libraries. The default is to not add anything.
--help This message.
--with-
If this option is used, only libraries
specified using this option will be built.
--without-
【Properties】:
toolset=toolset Indicates the toolset to build with.
msvc-6.0 : VC6.0
msvc-7.0: VS2003
msvc-8.0: VS2005
msvc-9.0: VS2008
msvc-10.0: VS2010
variant=debug|release Select the build variant
link=static|shared Whether to build static or shared libraries
threading=single|multi Whether to build single or multithreaded binaries
runtime-link=static|shared Whether to link to static or shared C and C++ runtime.
决定是静态还是动态链接C/C++标准库
Bjam 选项、参数说明 | |
--build-dir= | 编译的临时文件会放在builddir里(编译完就可以把它删除了) |
--stagedir= | 存放编译后库文件的路径,默认是stage |
--build-type=complete | 编译所有版本,不然只会编译一小部分版本(相当于: |
variant=debug|release | 决定编译什么版本(Debug or Release) |
link=static|shared | 决定使用静态库还是动态库 |
threading=single|multi | 决定使用单线程还是多线程库 |
runtime-link=static|shared | 决定是静态还是动态链接C/C++标准库 |
--with- | 只编译指定的库,如输入--with-regex就只编译regex库了 |
--show-libraries | 显示需要编译的库名称 |
【四、Bjam 生成文件的分析】
(1)生成 Release 版本,多线程,动态链接C++标准库 的regex 动态库
bjam --toolset=msvc-9.0
--stagedir=D:/05_Computer/04_3rdPatry/02Boost/boost_1_44_0/output2
--with-regex link=shared threading=multi variant=release runtime-link=shared stage
-- 输出: boost_regex-vc90-mt.lib
boost_regex-vc90-mt-1_44.lib
boost_regex-vc90-mt-1_44.dll
(2)生成 Release 版本,多线程,静态链接C++标准库 的regex 动态库
bjam --toolset=msvc-9.0
--stagedir=D:/05_Computer/04_3rdPatry/02Boost/boost_1_44_0/output2
--with-regex link=shared threading=multi variant=release runtime-link= static stage
-- 输出: 没有这种配置
(3)生成 Release 版本,多线程,动态链接C++标准库 的regex静态库
bjam --toolset=msvc-9.0
--stagedir=D:/05_Computer/04_3rdPatry/02Boost/boost_1_44_0/output2
--with-regex link= static threading=multi variant=release runtime-link=shared stage
-- 输出: libboost_regex-vc90-mt-s.lib
libboost_regex-vc90-mt-1_44.lib
(4)生成 Release 版本,多线程,静态链接C++标准库 的regex 静态库
bjam --toolset=msvc-9.0
--stagedir=D:/05_Computer/04_3rdPatry/02Boost/boost_1_44_0/output3
--with-regex link=static threading=multi variant=release runtime-link=static stage
-- 输出:libboost_regex-vc90-mt-s.lib
libboost_regex-vc90-mt-s-1_44.lib
--------------------------------------------------------------------------------------------------------------------
(1)生成 Debug 版本,多线程,动态链接C++标准库 的regex 静态库
bjam --toolset=msvc-9.0
--stagedir=D:/05_Computer/04_3rdPatry/02Boost/boost_1_44_0/output4
--with-regex link=static threading=multi variant=debug runtime-link=shared stage
-- 输出: libboost_regex-vc90-mt-gd.lib
libboost_regex-vc90-mt-gd-1_44.lib
(2)生成 Debug 版本,多线程,静态链接C++标准库 的regex 静态库
bjam --toolset=msvc-9.0
--stagedir=D:/05_Computer/04_3rdPatry/02Boost/boost_1_44_0/output5
--with-regex link=static threading=multi variant=debug runtime-link=static stage
-- 输出: libboost_regex-vc90-mt-sgd.lib
libboost_regex-vc90-mt-sgd-1_44.lib
(3)生成 Debug 版本,多线程,动态链接C++标准库 的regex 动态库
bjam --toolset=msvc-9.0
--stagedir=D:/05_Computer/04_3rdPatry/02Boost/boost_1_44_0/output5
--with-regex link=shared threading=multi variant=debug runtime-link=shared stage
- 输出: boost_regex-vc90-mt-gd.lib
boost_regex-vc90-mt-gd-1_44.lib
boost_regex-vc90-mt-gd-1_44.dll
(4)生成 Debug 版本,多线程,静态链接C++标准库 的regex动态库
bjam --toolset=msvc-9.0
--stagedir=D:/05_Computer/04_3rdPatry/02Boost/boost_1_44_0/output5
--with-regex link=shared threading=multi variant=debug runtime-link=static stage
-- 输出:没有这种配置
【总结】:
(1) 编译成功后,Bjam 都会给你生成一对一样的导入库文件或者静态库文件(如下),
唯一不同的是两个文件名称一个在后面加上了boost版本信息, 为了让用户知道使用的boost的版本信息。
boost_regex-vc90-xxxxx.lib
boost_regex-vc90-xxxxx-1_44.lib
(2) Bjam编译选项 有4个, 理论上应该有 2*2*2*2 = 16 种配置
ink= static| shared
threading= single |multi
variant=release|debug
runtime-link= static |shared
实际使用的多为多线程, 所以 threading= multi, 这样剩下的3个选项组成的编译配置就是上面所罗列的, 其中静态链接C++标准库的boost动态库这种配置也不存在, 所以就只有4种情况。
(3)
link= static : 静态库。 生成的库文件名称以 “lib”开头
link= shared : 动态库。生成的库文件名称无“lib”开头
threading= mult : 支持多线程。 生成的库文件名称中包含 “-mt”
variant=release 生成的库文件名称不包含 “-gd”
variant= debug 生成的库文件名称包含 “-gd”
runtime-link= static 生成的库文件名称包含 “-s”
runtime-link= shared 生成的库文件名称不包含 “-s”