zoukankan      html  css  js  c++  java
  • 编译Boost 详细步骤

    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:5_Computer4_3rdPatry2Boostoost_1_44_0oost_1_44_0 oolsjamsrc

    3.执行 build.bat 会在D:5_Computer4_3rdPatry2Boostoost_1_44_0oost_1_44_0

    oolsjamsrcin.ntx86 生成 bjam.exe文件.

    4.Copy bjam.exe 文件到 D:5_Computer4_3rdPatry2Boostoost_1_44_0oost_1_44_0 下

    6.进入D:5_Computer4_3rdPatry2Boostoost_1_44_0oost_1_44_0 目录

    7.执行bjam.exe 编译命令,如下:

    (1)编译所有boost动态库 (release|debug),包括头文件和库文件

    bjam --toolset=msvc-9.0 --prefix=D:5_Computer4_3rdPatry2Boostoost_1_44_0output --without-python --build-type=complete  link=shared  threading=multi install

    (2)只编译 release 版本 regex 动态库,包括头文件和库文件

    bjam --toolset=msvc-9.0 --prefix=D:5_Computer4_3rdPatry2Boostoost_1_44_0output1 --with-regex link=shared  threading=multi variant=release runtime-link=shared  install

    (3)只编译 release 版本 regex 动态库,包括库文件

    bjam --toolset=msvc-9.0

    --stagedir=D:5_Computer4_3rdPatry2Boostoost_1_44_0output2

    --with-regex link=shared  threading=multi variant=release runtime-link=shared  stage

    【注意】: Boost 源代码所在路径最好全英文,不要有空格、特殊字符、中文等

    编译要花上30分钟左右(根据PC性能所定), 会在指定生成目录:

    D:5_Computer4_3rdPatry2Boostoost_1_44_0output下生成对应库文件和头文件。

    8.设置开发环境

    打开VS2008 创建工程, 配置工程属性

    设置包含文件目录F:DevelopBoostlibAndDllincludeoost-1_37oost

    设置引用文件目录:F:DevelopBoostlibAndDlllib

    完成后,可以使用。

    【三、介绍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:5_Computer4_3rdPatry2Boostoost_1_44_0output2

    --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:5_Computer4_3rdPatry2Boostoost_1_44_0output2

    --with-regex   link=shared  threading=multi  variant=release  runtime-link= static  stage

    -- 输出: 没有这种配置

    (3)生成 Release 版本,多线程,动态链接C++标准库 的regex静态库

    bjam --toolset=msvc-9.0

     --stagedir=D:5_Computer4_3rdPatry2Boostoost_1_44_0output2

    --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:5_Computer4_3rdPatry2Boostoost_1_44_0output3

    --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:5_Computer4_3rdPatry2Boostoost_1_44_0output4

    --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:5_Computer4_3rdPatry2Boostoost_1_44_0output5

    --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:5_Computer4_3rdPatry2Boostoost_1_44_0output5

    --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:5_Computer4_3rdPatry2Boostoost_1_44_0output5

    --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”

  • 相关阅读:
    Code Forces 650 C Table Compression(并查集)
    Code Forces 645B Mischievous Mess Makers
    POJ 3735 Training little cats(矩阵快速幂)
    POJ 3233 Matrix Power Series(矩阵快速幂)
    PAT 1026 Table Tennis (30)
    ZOJ 3609 Modular Inverse
    Java实现 LeetCode 746 使用最小花费爬楼梯(递推)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
  • 原文地址:https://www.cnblogs.com/lidabo/p/3782193.html
Copyright © 2011-2022 走看看