boost库是一个开源免费的第三方库,它是一个非常优秀的库,是C++标准的最好实践之一,因此也经常被用于商业的开发。所以,如果你是搞C++的,还没有听过或用过boost,你就out了,想想自己是不是跟不上技术的步伐了,哈哈……
关于boost的地位,大家可以看看其官方文档:
We aim to establish "existing practice" and provide reference implementations so that Boost libraries are suitable for eventual standardization. Ten Boost libraries are included in the C++ Standards Committee's Library Technical Report (TR1) and in the new C++11 Standard. C++11 also includes several more Boost libraries in addition to those from TR1. More Boost libraries are proposed for standardization in C++17.
我们致力于建立(C++标准的)“现有实践”和参考实现,因此boost库都适合最终的标准。有10个boost库已经被包含在C++标准委员会的库技术报告(TR1)和新的C++11标准中。除了从TR1获得的几个库外,C++标准还包含了几个额外boost库。更多的boost库将可能被用于C++17标准中。
以下讲述的是windows平台下的使用,开发的IDE是VS2010。
你可以到其官网http://www.boost.org上去查找最新版本的boost,进行下载。也可以到这个链接直接下载1.57.0的boost:http://www.boost.org/users/history/version_1_57_0.html。
boost_1_57_0\ ............................................Boost的根目录
index.htm ..............................................www.boost.org中指导手册的一个副本
boost\ .....................................................所有Boost的头文件
lib\ ...........................................................预编译的二进制库
libs\ .........................................................Tests, .cpps, docs, etc., by library
index.html ........................................Boost库的使用手册的首页
algorithm\
any\
array\
…更多的库…
status\ ..................................................Boost-wide 测试包
tools\ ....................................................常用工具,如. Boost.Build, 快速查询手册, bcp
more\ ...................................................法律条款等
doc\ .......................................................Boost库文档的一个子集
1.你只需要将下载的boost压缩包解压即可,不需要任何安装。假设你的boost库是解压在E:\C++Workspace\boost_1_57_0目录下。
2.在VS2010下创建一个空的工程(我创建的是一个Win32 Console Application工程,假设工程名为BoostTest)。
3.右键点击你的工程名,选择Properties(属性),在弹出的对话框中选择 Configuration Properties > C/C++ > General ,在 Additional Include Directories中输入第1步解压的boost的根目录路径(如E:\C++Workspace\boost_1_57_0)
4.将BoostTest.cpp中的内容替换成以下的测试代码:
#include "stdafx.h" #include <boost/lambda/lambda.hpp> #include <iostream> #include <iterator> #include <algorithm> int main() { using namespace boost::lambda; typedef std::istream_iterator<int> in; std::for_each( in(std::cin), in(), std::cout << (_1 * 3) << " " ); }
4.编译你的工程BoostTest,编译成功后运行(F5)。在弹出的控制台对话框中输入2 4 6后按Enter,将输出6 8 12的结果,说明测试成功,boost可以正常使用了。按Ctrl+C结束输入。
如果你想要使用任何单独编译的 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的静态库和动态库。
bootstrap b2 --build-dir=.\lib toolset=msvc-10.0 --build-type=complete stage |
我用编译命令一编译后,进行链接测试时,报以下错误:
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)与编译命令一中含意相同,第二个命令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库
为了验证上面编译出来的静态库,我们可以用以下一个简单的“主题提取”的程序来进行测试。
1.在“在项目中引入boost”中已经创建了一个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?如果出现如下结果,说明验证成功。
可参考阅读:
http://www.boost.org/doc/libs/1_57_0/more/getting_started/windows.html#get-boost
http://www.cnblogs.com/zhcncn/p/3950477.html
如果您有什么疑惑和想法,请在评论处给予反馈,您的反馈就是最好的测评师!由于本人技术和能力有限,如果本博文有错误或不足之处,敬请谅解并给出您宝贵的建议!