今天学习了下VC6.0下boost的编译,只是对regex进行了编译,据说全部编译需要2个多小时,在此记录下学习过程中遇到的问题以便今后查看。
最开始直接从网上(www.boost.org)下载了当前最新版本boost_1_55_0.zip,无法正常编译,查找原因为vc6.0由于对c++标准支持的不是很好,所以当前的最新版本不支持vc6.0编译,于是尝试着下载了比较老的版本boost_1_39_0.7z进行编译。
1、解压
将下载的boost_1_39_0.7z进行解压,最终在我机子上的绝对路径为:D:\boost\boost_1_39_0
解压路径因人而异,不过最好不要包含中文。
2、编译
在“运行”中输入“cmd”,打开doc窗口
输入->cd D:\boost\boost_1_39_0\libs\regex\build //回车,设置目录
输入->d: //回车,转到当刚才设置的目录
此时显示如下:
d:\boost\boost_1_39_0\libs\regex\build>
接下来比较关键
将文件VCVARS32.BAT用鼠标拖入当前的doc窗口,然后回车,再输入:nmake -fvc6.mak 回车,开始进行编译。
VCVARS32.BAT文件是用来注册环境变量的,注册后只在当前窗口有效,窗口关闭后消失,这个文件一般位于vc的安装目录下,
我的路径为:D:\1_setup_dir\VC98\Bin 目录下。如果不注册会出现:“‘nmake’不是内部或外部命令....” 类似的错误提示。
编译结束后会在目录D:\boost\boost_1_39_0\libs\regex\build下面会出现文件夹vc6,里面是lib,dll和一些其他文件,其中lib和dll文件是后
面需要的。
.lib,后面的
测试中会出现错误:无法找到 *****39.lib ,后来将lib和dll中的38都改成39则能够通过测试,后来我测试编译版本boost_1_35_0没有出现类似情况。
3、vc6.0配置
首先将编译好的dll和lib拷贝到目录:D:\1_setup_dir\VC98\BoostRex 下,BoostRex自己创建。
然后打开vc6.0,选择Tools->Options->Directories->Include files 添加一行:D:\boost
在选择Tools->Options->Directories->Library files 添加一行:D:\1_setup_dir\VC98\BoostRex
配置完成
4、编程测试
#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 inStr; cmatch what;
cout << "enter test string" <<endl;
getline(cin, inStr);
if ( regex_match( inStr.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 table //回车两次
输出:
str:select name from table
str:e
str:table
Press any key to continue
对于输出结果的由来还需继续学习
参考文章:http://www.360doc.com/content/11/1028/21/1200324_159951943.shtml