boost入门指南(windows)

什么是boost

boost库是一个开源免费的第三方库,它是一个非常优秀的库,是C++标准的最好实践之一,因此也经常被用于商业的开发。

boost致力于建立(C++标准的)“现有实践”和参考实现,因此boost库都适合最终的标准。很多boost库已经被包含在C++11/C++17标准中

boost库的使用

以下讲述的是windows平台下的使用,开发的IDE是VS2010。

boost库的下载

http://jaist.dl.sourceforge.net/project/boost/boost/

boost的目录结构

在项目中引入boost

1.只需将boost压缩包解压即可,不需安装。假设你的boost库是解压在E:\C++Workspace\boost_1_57_0目录下。

2.在VS2010下创建一个空的工程(假设工程名为BoostTest)。

3.右键点击工程名,选择Properties(属性),在弹出的对话框中选择 Configuration Properties > C/C++ > General ,在 Additional Include Directories中输入第1步解压的boost的根目录路径(如E:\C++Workspace\boost_1_57_0)

4.将BoostTest.cpp中的内容替换成以下的测试代码:

//引入boost库

5.编译你的工程BoostTest,编译成功后运行(F5)。说明测试成功,boost可以正常使用了。

编译二进制的boost库

如果你想要使用任何单独编译的 Boost 库,你需要获得二进制的库文件。用Visual C++从源代码中编译二进制库的过程如下:

打开VS2010的命令提示符控制台:Windows开始菜单\Microsoft Visual Studio 2010\Visual Studio Tools\Visual Studio 2005 Command Prompt,用cd命令将当前目录定位到Boost的根目录(E:\C++Workspace\boost_1_57_0),输入如下两个编译命令:

bootstrap
.\b2

第一个命令(bootstrap)会执行bootstrap.bat脚本,是用于准备需要使用的Boost.Build程序;第二个命令(.\b2)是调用Boost.Build程序构建独立编译的Boost库。

 

输入第一个命令(bootstrap)后需要等待一小段时间,执行成功完毕后,Boost根目录会多出四个文件:

b2.exe:           Boost.Build程序,用于编译二进制的Boost库

bjam.exe :        Boost.Build程序,用于编译二进制的Boost库

bootstrap.log :    执行以上两个命令时记录的日志

project-config.jam: Boost.Build的配制参数

b2.exe 、bjam.exe 这两个exe作用是一样的,bjam.exe 是老版本,b2是bjam的升级版本。

输入第二个命令(.\b2)后进行编译,整个编译的过程会非常长,可能需要一个小时左右,请耐心等待。编译成功后会有如下提示:

 

这时你的Boost根目录下会多出个lib文件夹(笔者的是在.\stage\lib,可能每一台电脑或平台下不一样,请以命令行最后的提示为准,如上图),这就是编译出来的Boost的静态库和动态库。

编译命令二(VS2010):

bootstrap

b2 --build-dir=.\lib toolset=msvc-10.0 --build-type=complete stage

第二个命令b2 --build-dir=.\lib toolset=msvc-10.0 --build-type=complete stage的含意如下:
--build-dir                 编译Boost库时的工作目录,用于存放中间文件
toolset=msvc-10.0           toolset是C++编译器的集合,msvc-10.0表示微软VC++10.0编译器,VS2010支持。
--build-type=complete stage    “--build-type=complete” 导致Boost.Build 会编译出所有支持类型的Boost库

我用编译命令一编译后,进行链接测试时,报以下错误:

error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in BoostTest.obj
error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in BoostTest.obj
error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in BoostTest.obj
error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in BoostTest.obj
error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in BoostTest.obj
error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in BoostTest.obj
error LNK1104: cannot open file 'libboost_regex-vc100-mt-gd-1_57.lib'

但我在\stage\lib目录下只找到相应的libboost_regex-vc120-mt-1_57.lib和libboost_regex-vc120-mt-gd-1_57.lib。

上网查了资料说是编译出来的Boost库是VC++11的,需要在VS2012上才能支持,VS2010不支持。因此需要重新设置选项,指定编译器的版本。上面的命令,第一个命令(bootstrap)与编译命令一中含意相同。

验证Boost库

验证上面编译出来的静态库,可以用以下一个简单的“主题提取”的程序来进行测试。

1.已经创建了一个BoostTest工程,右键点击你的工程名,选择Properties(属性),在弹出的对话框中选择 Configuration Properties > Linker > General ,在 Additional Library Directories中输入上面编译出来静态库的路径(如E:\C++Workspace\boost_1_57_0\stage\lib)

2.将BoostTest.cpp中的内容替换成以下代码

#include "stdafx.h"
#include <boost/regex.hpp>
#include <iostream>
#include <string>

int main()
{
    std::string line;
    boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );
    
    while (std::cin)
    {
        std::getline(std::cin, line);
        boost::smatch matches;
        if (boost::regex_match(line, matches, pat))
            std::cout << matches[2] << std::endl;
    }
}

3.Build你的工程

4.在你工程编译出的Debug目录下会有一个可执行程序BoostTest.exe,在该目录下创建一个subject.txt文件,并将以下内容保存至subject.txt文件中。

To: George Shmidlap

From: Rita Marlowe

Subject: Will Success Spoil Rock Hunter?

---

See subject.

5.打开命令提示符,将当前目录定位到Debug目录下(如E:\C++Workspace\VS2010\BoostTest\Debug),输入:BoostTest.exe < subject.txt。将会获取该文本的主题Will Success Spoil Rock Hunter?如果出现如下结果,说明验证成功。

 

补充:

 Boost库中比较有名的几个库:

   (1)Regex,正则表达式库;

   (2)Spirit,LL parserframework,用C++代码直接表达EBNF;

   (3)Graph,图组件和算法;

   (4)Lambda,在调用的地方定义短小匿名的函数对象,很实用的functional功能;

   (5)conceptcheck,检查泛型编程中的concept;

   (6)Mpl,用模板实现的元编程框架;

   (7)Thread,可移植的C++多线程库;

   (8)Python,把C++类和函数映射到Python之中;

   (9)Pool,内存池管理;

   (10)smart_ptr,智能指针。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值