Boost编译和安装

 

首先下载Boost_1_34_1.zip和Boost-jam-3.1.15.zip前一个是boost主文件包,后一个是编译Boost库用的JAME工具.
现定义 %BOOST% 为Boost_1_34_1.zip的解压路径,%BOOST_BJAM%为Boost-jam-3.1.15.zip的解压路径.
打开%BOOST_BJAM%/Build.bat,修改其中的编译器路径.如:

if EXIST "%ProgramFiles%/Microsoft Visual Studio 8/VC/bin/VCVARS32.BAT" (
   set "BOOST_JAM_TOOLSET=vc8"
   set "BOOST_JAM_TOOLSET_ROOT=%ProgramFiles%/Microsoft Visual Studio 8/VC/bin/VCVARS32.BAT"
   goto :eof)
setlocal & endlocal

修改为(VS2005):

if EXIST "D:/Program Files/Microsoft Visual Studio 8/VC/bin/VCVARS32.BAT" (
   set "BOOST_JAM_TOOLSET=vc8"
   set "BOOST_JAM_TOOLSET_ROOT=D:/Program Files//Microsoft Visual Studio 8/VC/bin/VCVARS32.BAT"
   goto :eof)
setlocal & endlocal

或者(VS98):

if EXIST "C:/Program Files//Microsoft Visual Studio/VC/bin/VCVARS32.BAT" (
   set "BOOST_JAM_TOOLSET=vc8"
   set "BOOST_JAM_TOOLSET_ROOT=C:/Program Files//Microsoft Visual Studio/VC/bin/VCVARS32.BAT"
   goto :eof)
setlocal & endlocal

保存后执行build.bat.完成后会在%BOOST_BJAM%/bin.ntx86目录下面生成一个bjam.exe的文件,一会用它来编译生成boost的库文件.
把bjam.exe拷贝到%BOOST%目录下,并新建一个Build.bat文件.编辑Build.bat

call "D:/Program Files/Microsoft Visual Studio 8/VC/bin/vcvars32.bat"
bjam -sBOOST_ROOT=. -sTOOLS=vc-8_0  --build-dir=. --with-regex --toolset=msvc stage

这样可以在%BOOST%/stage/lib目录下生成所需的库文件.我的感觉是添加"--with"参数,一个库一个库的编译(也许可以同时添加多个库我没有试)会快点.一般用不到Python、test、thread(Boost的thread库对Windows平台的支持并不好,因为他是基于Posix线程的),而最占时间的应该是Python库了.
需要编译的Boost库一共有12个,都是与平台相关的库.分别为:

 

 

Date_time
Test
Python
Filesystem
Thread
Wave
Program_options
Regex
Serialization
Signals
Graph
Iostreams

编译好之后,就可以在VS2005的"工具"-->"选项",选择"项目和解决方案"-->"vc++ 目录"中将%BOOST%/lib和%BOOST%/stage/lib添加"库文件"中,将"%BOOST%"添加到"包含文件"中.
在VC98中,选择"Tools” ->"Options” ->"Diretories” ->"Show Diretories for”,同样将以上文件夹分别添加到"Include Files"和 "Library Files"中.

最后测试一下是否安装成功:



#include "stdafx.h"
#include <cstdlib>
#include <stdlib.h>
#include <boost/regex.hpp>
#include <string>
#include <iostream>
using namespace std;
using namespace boost;
regex expression("^select ([a-zA-Z]*) from ([a-zA-Z]*);");
int main(int argc, char* argv[])
{
     std::string in;
     cmatch what;
     cout << "enter test string" << endl;
     getline(cin,in);
     if(regex_match(in.c_str(), what, expression))
     {
           for(int i=0;i<what.size();i++)
           cout<<"str :"<<what[i].str()<<endl;
     }

     else
     {
        cout<<"Error Input"<<endl;
     }

        return 0;
}
输入:select name from database;
输出:str:select name from table;
   str:name
   str:table
这样就完成了.

 

 

1. Boost的安装

 

首先,从Boost库的官方网站 进行Boost的下载,最新的版本可能是1.39.0,不过我使用的1.36版本。下载完成并解压,就可以了。解压后的空间可能会很大。所以请预先留足空间。编译之后会用更多的空间。

2. Boost的编译

编译的过程很漫长,而且会占用相当大的磁盘空间。

(1)运行tools/jam/src/build.bat。

(2)将bin.ntx86文件夹下的bjam文件夹拷贝至Boost安装根目录。

(3)完整编译命令如下

 

bjam toolset=msvc threading=multi variant=debug release stage

 

其中toolset指的是编译器,msvc就表示微软的VS编译器;threading是表示单线程或者多线程,一般都为多线程;variant是一些参数,debug release表示既编译出debug版本,又编译出release版本,stage表示编译出来的文件都放在stage目录下。

以上是完全编译,如果不想完全编译的话,可以用--without指定不想编译的库,例如--without -wave等等。

3. Boost库的使用

(1)打开VS,单击VC配置,工具,选项,VC++目录。

在包含文件那一项,添加Boost的根目录;在库文件那一项,添加刚刚编译出来的库所在的目录(stage)。

这样就完成。

(2)写个测试程序。当上述程序编译通过,并可以正常运行,表示Boost库的安装已经成功。

 

 

 

1)下载boost

  http://www.boost.org/users/download/

  这是它的下载页面,需要下载2个东西:

  Packaged Releases

  VERSION 1.35.0

  和

  Boost Jam 3.1.16

  你需要在每个条目下面找到Details | Download字样,点击Download,进入下载页。可是遗憾的是sourceforge站点被封了,所以通常你是无法下载的。(我诅咒封这个站点的人)。因此有必要使用某些特殊的工具来穿透这个封锁。我下载的是这个:

  boost_1_35_0.tar.gz

  和

  boost-jam-3.1.16.zip

  2)下载Python2.5.2

  http://www.python.org/download/

  在这个页面点击Python2.5.2 Windows Installer

  得到一个Python2.5.2.msi后,即可点击安装。我安装在C:OpenSourcePython25

  创建一个批处理文件:pt.bat,内容如下:

set path=C:OpenSourcePython25

Python

  然后启用命令行工具(运行cmd.exe),进入pt.bat所在目录,键入pt.bat

  如果你看到>>>的提示符号,说明python安装成功。

  3)编译boost-jam

  解压boost_1_35_0.tar.gz,到目录boost_1_35_0。我的是在C:OpenSource boost_1_35_0。这样你在C:OpenSource boost_1_35_0下就能发现boost-build.jam这个文件。

  解压boost-jam-3.1.16.zip,然后在目录下双击build.bat,即进行编译。编译结束,可以发现生成了bin.ntx86bjam.exe。

  我们要的就是这个bjam.exe,把它复制到boost_1_35_0目录下,在这个目录下有boost-build.jam文件。

  4)完全编译boost_1_35_0

  编译全部库。虽然你可以只编译一部分,但是还是全部编译,省的以后麻烦。为此你需要编写一个批处理文件,我命名它为boost.bat:

SET MSVC_ROOT="F:Microsoft Visual Studio 8VC" 

SET VISUALC="F:Microsoft Visual Studio 8VC" 

SET JAM_TOOLSET=VISUALC

SET PYTHON_ROOT=C:OpenSourcePython25

SET PYTHON_VERSION=2.5.2

SET PATH=C:OpenSourceboost_1_35_0

  你要保证你的路径是正确设置的。然后把这个文件保存到C:OpenSource下面。(其实位置不重要)。然后启用命令行工具(cmd)。类似地输入下面的命令(<Enter>表示回车):

C:OpenSource>boost.bat<Enter>

C:OpenSource>cd boost_1_35_0<Enter>

C:OpenSourceboost_1_35_0>bjam -sBOOST_ROOT=. -sTOOLS=msvc<Enter>

  然后你就等待吧。一大堆的警告是不要管的。估计等1小时不到的时间,就完全编译好了。你可以发现在C盘出现了:

  C:Boost

  它下面有Include和Lib目录。你可以使用这个C:Boost,使用它的静态或动态库。也可以使用C:OpenSourceboost_1_35_0下的源代码。

  5)结束也是开始BOOST之旅

  好了,开始你的boost之旅吧。我用它的graph库实现了最短路径,整个上海的路网,4万多条路段,任意2点查询最短路径,不超过3秒就OK。内存消耗在30M左右。从此我喜欢上了boost。

  最新的BOOST提供了C++和Python的接口,这也是我要用它的理由。一个简单的比喻,C++好比COM,Python好比JavaScript,如果你认为JavaScript调用COM可以产生强大的威力,是原子弹的话,那么Python调用C++则是氢弹。关于Boost.Python的知识,参考:

  http://www.cppblog.com/jinq0123/archive/2008/05/29/BuildingHybridSystemswithBoostPython_c.html

  当然,我还是觉得上述过程太复杂,在Windows上使用Boost,你可以完全忽略上面的过程,到下面这个链接里直接取得一个下载软件,它会给你下载你要的包:

  http://www.boostpro.com/products/free

 

最近做开发碰到了长字符串匹配、搜索的问题,最先想到的是使用正则表达式,简单、高效。

  但是我用的开发工具是VC6.0,不支持正则表达式。

  上网baidu一下,发现支持正则的库还真不少,大概有以下几种:boost,GNU,VC7带的ATL中的和微软发布的greta。

  网上的朋友对boost评价不错,决定就使用是它了!

  1、接下来的就是下载boost库,网上很好找。我下载的是压缩包,20多M,解压后将近100多M。

  我解压的目录是D:/boost

  2、然后是编译,我只要支持正则表达式就可以,因此只需要编译D:/boost/libs egex/build目录下的文件。据说全部编译要花将近2个小时,没有验证过,在我家里的机器上编译正则表达式部分只用了不到5分钟。

  网上介绍的如何编译最多的一篇文章是“VC利用boost库解析正则表达式”,如果有人能根据这篇文章编译成功不妨告诉小弟一声……

  以下是我的操作:

  在“运行”里输入“cmd”,打开命令提示符;

  输入命令“cd D:/boost/libs egex/build”//设置当前目录

  输入命令“D:”//转到当前目录

  接下来是很关键的一步:

  很多文章是这样说的“输入 nmake -fvc6.mak”

  但是出现了“'nmake' 不是内部或外部命令,也不是可运行的程序或批处理文件。”的错误提示。

  然后你就会拼命查找原因,结果又有文章上说是环境变量没配置好,然后给出一堆“set”。

  也有的文章说是运行一下visual studio安装目录下的VC98/Bin/VCVARS32.BAT文件就OK了。

  你按照文章作者的方法做的,结果发现问题依旧!

  以上说法都是正确的,但是说得都不是很完整,出现错误提示的根本原因就是环境变量没配置好,不识别nmake命令,配置过jdk的朋友就很容易明白。如果按照作者的要求搞一堆“set”,未免大题小作了吧,因为我们只需要用一次'nmake' 就可以解决问题了。

  VCVARS32.BAT正式配置环境变量的批处理文件,但是配置的参数只在当前窗口有效,也就是说当你双击运行后窗口关闭,环境变量已经没有了。

  于是我用了以下方法:

  把VCVARS32.BAT文件用鼠标拖到打开的cmd窗口("D:/Program Files/Microsoft Visual Studio/VC98/Bin/VCVARS32.BAT"),然后回车。

  输入命令“nmake -fvc6.mak”

  等待几分钟,OK了!,D:/boost/libs egex/build多了一个vc6的文件夹,里面是很多lib和dll文件。

  3、到此资源已经准备好了,下面要做的工作是配置VC6.0,使它编译使时候能找到正则库。

  把vc6下的所有lib和dll文件拷贝到Visual Studio安装目录下的VC98/boostRex(boostRex是我自己建的)

  然后打开vc6.0,选择“Tools->Options->Directories->Include files”,加入一行“D:/BOOST”

  选择“Tools->Options->Directories->Library file”,加入一行“C:/PROGRAM FILES/MICROSOFT VISUAL STUDIO/VC98/BOOSTREX”(彩色部分是我的Visual Studio安装目录)

  配置也OK了!

  4、编写程序测试

  SDK下的测试:

  #include "stdafx.h"

  #include

  #include

  #include

  #include

  #include

  using namespace std;

  using namespace boost;

  regex expression("^select ([a-zA-Z]*) from ([a-zA-Z]*)");

  int main(int argc, char* argv[])

  {

  std::string in;

  cmatch what;

  cout << "enter test string" << endl;

  getline(cin,in);

  if(regex_match(in.c_str(), what, expression))

  {

  for(int i=0;i< p>

  cout<<"str :"<<< p>

  }

  else

  {

  cout<<"Error Input"<< p>

  }

  return 0;

  }

  输入: select name from table

  输出: str:select name from table

  str:name

  str:table

  MFC下的测试(有几个地方要注意,下面有提示):

  新建一个对话框的MFC工程,

  加入头文件

  #include

  在按钮鼠标单击事件响应函数中加入

  boost::regex expression("^select ([a-zA-Z]*) from ([a-zA-Z]*)");

  CString in = "select gm from tab";

  CString sRet;

  boost::cmatch what;

  if(boost::regex_match(LPCSTR(in), what, expression))//CString转string

  {

  for(int i=0;i< p>

  sRet = (what.str()).c_str();//string转CString

  MessageBox(sRet);

  }

  }

  else

  {

  MessageBox("Error Input");

  }

  输出的结果跟上面一样。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值