2009年5月

Vista下使用Visual Studio 2008(VC)独立编译Boost.Regex库

Boost 1.39.0

大家只要知道这是什么就可以了,Boost中的正则表达式库!
貌似是现在解析正则表达式效率最高的库了,也许有人单独用Regex++,这其实就是Boost中的Regex库,只不过作者单独提供,不知道为什么(懒得探究了),这个库我没法编译,提示Makefile语法有错,未知。。。

正则表达式很适合处理和字符串有关的工作,比如匹配,验证,搜索等等。。。
不了解的朋友可以百度一下相关的资料。。。值得一学!^_^

好了,这里总结一下我的编译过程,互相交流。
因为现在只想使用Regex库(要支持Unicode),其他的Boost库暂时不用(全部编译花了我4.5G,还没编译完。。。),所以进行单独编译。

  1. 因为我主要使用Unicode编码的字符串。所以要Regex支持Unicode,这里需要ICU,从Sourceforge下载(http://nchc.dl.sourceforge.net/sourceforge/icu/icu4c-4_0-src.zip)(需要的话,还有帮助文档)

  2. 编译ICU,比较简单,解压,打开source\allinone子目录下的allinone.sln项目文件,附带的是VS2005的,这里需要升级到2008,一般没什么问题,然后直接编译,Debug或者Release的,看你需要了,之后在lib目录下能够找到库文件,bin目录下有dll文件(动态库编译)。

小提示:因为我之前使用STLPort替换MS的STL,所以第一次编译出了点问题,应该是设置的问题,没有深究,改成原来MS的STL,就可以了。

  1. 解压Boost

  2. 使用bjam。你可以自行编译bjam,我这里直接使用编译好的版本。(之前使用nmake编译,成功了,但是编译之后的库文件的命名为1.38.0的,可能是作者疏忽,如果自己改的话,麻烦,不如直接重新编译,使用bjam就没有这个问题)
    放到解压后的Boost文件夹中的libs\regex\build子文件夹,因为bjam要使用这里的Jamfile.v2文件单独编译Regex

  3. 打开cmd(如果后面编译失败,可以尝试使用管理员身份运行)

  4. 给命令行编译器设置环境变量,直接调用Visual Studio 2008目录中的配置文件,在Common7\Tools子目录中的vsvar32.bat
    我的是:E:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvar32.bat
    直接在cmd里粘贴"E:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvar32.bat”
    注意要包含双引号,因为我这里的路径有空格,如果你的也是,就要用双引号括起来

  5. 不停地cd进入到解压后的Boost文件夹中的libs\regex\build子目录,调用如下命令
    bjam –sICU_PATH=icupath threading=multi link=shared,static runtime-link=static
    因为我使用多线程,所以就编译线程安全的multi库,要编译单线程的,用single参数
    icupath是指icu的解压目录(不是ICU编译后的lib目录,lib目录bjam会自己定位),如果这里也包含空格,同样的,也要使用双引号括起来

  6. 等待一会,就会编译完成,在Boost的解压目录中的bin.v2\libs\regex\build\msvc-9.0子目录中就会找的编译好的文件,lib和dll等,而且分类存放了起来
    为了使用方便,我做了如下调整,将所有文件直接存放到bin.v2\libs\regex\build\msvc-9.0下自己新建的lib文件夹里,需要连接什么文件regex的头文件清楚,我们只需指定必要的宏就可以了

  7. 配置Visual Studio 2008。将刚才自己创建的lib子目录添加进VS的库文件的搜索路径,然后将解压后的Boost路径添加进VS的包含文件的搜索路径,即可

  8. 开一个win32的小项目regextest测试一下,代码如下:

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

int _tmain(int argc, _TCHAR* argv[])
{
     boost::wregex a(L"\\d{4}");
     if(boost::regex_match(L"1325",a))
     {
         std::cout<<"yes"<<std::endl;
     }
     else
     {
         std::cout<<"no"<<std::endl;
     }

     return 0;
}

编译连接通过,测试结果:yes

有什么问题的话,我们互相交流^_^

Vista系统下使用Visual Studio 2008编译STLPort

Vista系统下使用Visual Studio 2008编译STLPort

STLPort 5.2.1

  由于VC中附带的STL实现版本并不完全符合ISO C++标准,效率欠佳,问题也比较多,所以决定换掉MS的STL,现在用得比较多的是STLPort,它是SGI STL的可移植版本,SGI Port是和C++标准比较符合的一个STL实现,是GCC编译器的内置STL,了解Linux下编程的朋友应该都认识GCC,应该算目前最符合C++标准的一个编译器了吧。

  好了废话不多说,进入实战!

  按照帮助文档的编译说明,失败!
  之后在网上看到了许多成功的案例,试着编译,最后还是失败。。。
  最后总算是编译出来了,共享一下!

  我的开发环境是Visual Studio 2008,vista系统,下载的STL Port是5.2.1版本的(暂时最新),最新版的应该也可以按如下方法编译:

编译前的设置:
将VC中的bin目录添加到环境变量PATH中,这样系统可以直接找到命令,比如下面的nmake,编译时要用的cl,link,lib等。
我这里的是E:\Program Files\Microsoft Visual Studio 9.0\VC\bin

  1. 解压STL Port到任意目录,解压路径最好不要包含中文字符,路径中也不要含有空格等特殊字符!(我这里是E:\STLPort)

  2. 打开cmd(如果编译失败,可以试着以管理员身份运行cmd)

  3. 进入STL的安装目录(不会DOS命令的朋友,可以上网找找,学编程还是应该懂点BAT指令才行^_^)

  4. 执行命令configure.bat msvc9
    这是为了简化编译步骤而做的设置,会在build\lib子目录生成Mackfile文件

  5. 执行”E:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat”,在cmd键入命令的时候要用双引号包起来(因为有空格)。
    这一步很重要,这是设置编译时需要的环境变量,因为独立的cl编译器是和IDE做了集成的,cl所需的环境变量是从IDE的设置中获取的,所以这里一定要执行,否则最基本的windows.h它也说找不到

  6. 现再进入build\lib子目录

  7. 执行nmake clean install

  8. 一切搞定,在STLPort的bin和lib目录中会找的编译后的dll和lib文件,添加到IDE中的路径就可以了,还有stlport子目录是所需的头文件,也添加进IDE的包含路径中。

  提醒一下,在设置IDE时一定要将STLPort的包含文件路径和库文件路径放到VC的默认包含路径之前,否则STLport还是一样用不上,因为STLport是对C++标准库中STL的另一种实现,与VC中的标准库实现相对,我们是要覆盖原标准库,使用STLport替代,所以要让编译器和连接器首先使用STLport的头文件和库。

(转)IE8引发VS2005/2008向导出错的解决方案

IE8引发VS2005/2008向导出错的解决方案

现象:
1.jpg

2.jpg

解决办法,这是Visual C++开发组给出的方案,经过测试有效

打开注册表编辑器(regedit)

在如下位置创建如下注册表项和键值:

选择“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones“
(如果该项中没有名为1000的项,就自己创建一个)
在1000中建一个DWORD键,如下:

名称:1207
数据类型:REG_DWOR
值:0x000000

一切OK了!^_^

截图:
3.png