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 下载可以到官方网站下载:

http://www.boost.org/

(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=<PREFIX>       Install architecture independent files here.

Default; C:\Boost on Win32

Default; /usr/local on Unix. Linux, etc.

--exec-prefix=<EPREFIX>  Install architecture dependent files here.

Default; <PREFIX>

--libdir=<DIR>          Install library files here.

Default; <EPREFIX>/lib

--includedir=<HDRDIR>   Install header files here.

Default; <PREFIX>/include

stage                 Build and install only compiled library files

======               to the stage directory.

在“--stagedir=”指定的目录下生成指定库文件

--stagedir=<STAGEDIR>   Install library files here

Default; ./stage

【Other Options】:

--build-type=<type>     Build the specified pre-defined set of variations

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  <threading>multi  <link>shared

<link>static  <runtime-link>shared" as the

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=<layout>       Determines whether to choose library names

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 <HDRDIR> whose

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 <HDRDIR>. This option is

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-<library>                Build and install the specified <library>

If this option is used, only libraries

specified using this option will be built.

--without-<library>              Do not build, stage, or install the specified

<library>. By default, all libraries are built.

【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>
 编译的临时文件会放在builddir里(编译完就可以把它删除了)
 
--stagedir=<stagedir>
 存放编译后库文件的路径,默认是stage
 
--build-type=complete
 编译所有版本,不然只会编译一小部分版本(相当于:
variant=release,threading=multi;
link=shared|static;runtime-link=shared)
 
variant=debug|release
 决定编译什么版本(Debug or Release)
 
link=static|shared
 决定使用静态库还是动态库
 
threading=single|multi
 决定使用单线程还是多线程库
 
runtime-link=static|shared
 决定是静态还是动态链接C/C++标准库
 
--with-<library>
 只编译指定的库,如输入--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”

编译Boost 详细步骤的更多相关文章

  1. 编译Boost 详细步骤 适用 VC6 VS2003 VS2005 VS2008 VS2010

    vs2008编译boost [一.Boost库的介绍] Boost库是一个经过千锤百炼.可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一.Boost库由C++标准委员会库 ...

  2. 编译Chrome详细步骤

    编译Chrome详细步骤   文章来源:http://blog.csdn.net/allendale/article/details/9262833 参考:http://dev.chromium.or ...

  3. mysql 5.6.25编译安装详细步骤

    简略步骤: mysql5.6.25编译安装步骤: 下载mysql准备用户和组yum安装依赖解压mysqlcmake编译mysqlmake && make install ----时间约 ...

  4. 01.LNMP架构-Nginx源码包编译部署详细步骤

    操作系统:CentOS_Server_7.5_x64_1804.iso 部署组件:Pcre+Zlib+Openssl+Nginx 操作步骤: 一.创建目录 [root@localhost ~]# mk ...

  5. 02.LNMP架构-MySQL源码包编译部署详细步骤

    操作系统:CentOS_Server_7.5_x64_1804.iso 部署组件:Cmake+Boost+MySQL 操作步骤: 一.安装依赖组件 [root@localhost ~]# yum -y ...

  6. 在WSL Ubuntu 下编译UPX详细步骤

    准备环境: 1. sudo apt-get update 2. sudo apt-get clang 3. apt-get install libstdc++-dev Reading package ...

  7. 下载编译Chrome详细步骤

    文章来源:http://blog.csdn.net/allendale/article/details/9262833 参考:http://dev.chromium.org/developers/ho ...

  8. 03.LNMP架构-PHP源码包编译部署详细步骤

    一.环境准备 操作系统:CentOS_Server_7.5_x64_1804.iso 部署组件:yasm+libmcrypt+libvpx+tiff+libpng+freetype+jpeg+libg ...

  9. VS2010编译Boost 1.57 静态链接库

    http://www.cnblogs.com/cuish/p/4175491.html 0.前提 Boost库版本 1.57.0 下载地址 http://www.boost.org/users/his ...

随机推荐

  1. C# XmlSerializer序列化浅析

    C# 中使用 XmlSerializer 实现类和xml文件的序列化和反序列化,使用起来非常简单. C# XmlSerializer实现序列化: XmlSerializer xml = new Xml ...

  2. git基础使用小记

    一.安装步骤省略二.运行“Git Bash“在打开的窗口中输入:ssh-keygen -t rsa -C "my@gmail.com" 会提示SSH Public Keys存放的位 ...

  3. C程序设计语言练习题1-7

    练习1-7 编写一个打印EOF的值的程序. #include <stdio.h> // 包含标准库的信息. int main() // 定义名为main的函数,它不接受参数值. { // ...

  4. 修改textField的placeholder的字体颜色、大小

    textField.placeholder = @"username is in here!"; [textField setValue:[UIColor redColor] fo ...

  5. android系统自带的Service原理与使用

    1. 说明 android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如 MountService监听是否有SD卡安装及移除,Clipboar ...

  6. 【转】 boot.img的解包与打包

    原文网址:http://blog.csdn.net/wh_19910525/article/details/8200372 Android 产品中,内核格式是Linux标准的zImage,根文件系统采 ...

  7. 【转】Ubuntu重装,直接进win7,不进linux的解决方案(添加Ubuntu启动菜单)

    原文网址:http://my.oschina.net/u/1377657/blog/281875 本人重装了Ubuntu12.04.4 LTS, 将Ubuntu启动项放在了/boot分区里面,启动的时 ...

  8. hdu4623:crime 数学优化dp

    鞍山热身赛的题,也是去年多校原题 题目大意: 求n个数的排列中满足相邻两个数互质的排列的数量并取模 当时的思路就是状压dp.. dp[i][state]  state用二进制记录某个数是否被取走,i ...

  9. 在CentOS中编译安装VIM 7.3

    默认安装的 Vim 不带有多字符支持,所以不支持中文.无论是将 CentOS 本来的语系改为中文还是将 Vim 的语系设置改为中文,都不能正常显示中文.为了在 Vim 中能够正常处理中文,我们需要在编 ...

  10. Hibernate试题解析

    1.在Hibernate中,以下关于主键生成器说法错误的是(AC). A.increment可以用于类型为long.short或byte的主键(byte类型不可以) B.identity用于如SQL ...