Boost的源码主要分为两类:
一类是源码都在头文件中源码。只用这类源码只需要包含特定的头文件即可。
一类是源码包含在头文件和源文件中。想要使用该类源码需要连接该头文件对应的动态链接库文件。
第二类的源码主要有以下几类:
· Boost.Filesystem
· Boost.GraphParallel
· Boost.IOStreams
· Boost.MPI
· Boost.ProgramOptions
· Boost.Python (see the Boost.Python build documentation before building and installing it)
· Boost.Regex
· Boost.Serialization
· Boost.Signals
· Boost.System
· Boost.Thread
· Boost.Wave
· Boost.DateTime
· Boost.Graph
· Boost.Math
· Boost.Random
· Boost.Test
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
如何利用DevC++中的gcc编译器来对第二种源码进行编译生成动态链接库:
用DEV-C++所带的编译器gcc来编译BOOST库。
首先下载BOOST库http://sourceforge.net/project/showfiles.php?group_id=7586, 然后解压。
为了编译BOOST,首先要编译bjam,然后用bjam和gcc来编译出BOOST二进制库。
以下为具体步骤:
1。设置GCC的环境变量PATH。
在我的电脑上点击右键,选择Properties菜单项。然后在弹出的对话框中选择Advanced页,点击Environment Variables按钮。
之后进行如下设置,选择PATH,然后点击Edit按钮,在最后加上DEV-C++编译器的路径,如D:/Program Files/DEV-CPP/Bin,路径之间用分号分隔。 设置完毕点击OK按钮保存。
2。编译bjam。打开一个命令窗口,进入路径D:/boost_1_42_0/tools/jam/src(只要找到build.bat命令即可),运行命令
build.bat gcc
编译完后会生成bin.ntx86目录,里面有bjam.exe。把bjam.exe拷贝到BOOST库的根目录,如E:/clib/boost_1_42_0
3。利用bjam编译BOOST
在BOOST库的根目录下运行bjam --build-dir=build --toolset=gcc, BOOST库就开始编译了。整个过程会持续四五十分钟左右。生成的库回放在build目录下,如果你想放在不同的目录下,可以在命令行参数--build-dir指定。
(编译完成之后会在duild-dir指定目录中找到编译完成的动态链接库文件。)
4.使DevC++包含boost
在Dev-C++的工具->编译选项->目录->C++包含文件中添加boost文件夹的上级目录,如E:/clib/boost_1_42_0
、/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
对上面两类的源码进行使用的例子:
例子1:该例子使用一个lambda的头文件
#include <boost/lambda/lambda.hpp> //只要包含该头文件即可,就能使用该头文件中的所有函数
#include <iostream>
#include <iterator>
#include <algorithm>
using namespace std;
int main()
{
using namespace boost::lambda;
typedef istream_iterator<int> in;
for_each(in(cin), in(), cout << (_1 * 3) << " ");
return 0;
}
例子2:该例子使用正则表达式regex.hpp,编译完成之后需要链接regex的动态链接库
步骤如下:
首先你需要建立一个project,而不能只是编译单个的c++文件,因为在dev c++中,只有在project中才能设置linker的参数。 建立project后,“Project"-->"Project Options"-->"Parameters"选项卡--->在linker框中添加:"-lboost_regex-mt",告诉linker在链接的时候,链接regex库。That's Ok!
#include <boost/regex.hpp>
#pragma comment(lib,"D:/boost/boost_1_42_0/stage/libboost_regex-meg34-mt.lib")
#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[1]<<" "<<matches[2] << std::endl;
}
return 0;
}
参考文献:
http://www.cnblogs.com/vilyLei/articles/1709941.html
http://hi.baidu.com/nkhzj/blog/item/89e675cb56d5771abe09e6a1.html
http://www.boost.org/doc/libs/1_46_0/more/getting_started/windows.html#header-only-libraries