技术员博客      html  css  js  c++  java
  • windows平台cl.exe编译pcre 8.13

    最近在windows平台开发的一个project需要使用正则表达式,当然自己实现一个regexp也是可以的,只是太蛋疼且技术不到家。所以我优先考虑了open source的library,pcre是比较有名的库,在linux编译都是普通的套路,不过在win下面就稍微麻烦一点了。

    主要参考tombkeeper兄的《VC编译pcre备忘》一文。具体步骤参考如下:

    1. 下载最新的pcre:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.13.zip (zip/tar.gz/tar.bz2三种格式任选一种,windows的一般用zip),并解压。
    2. 重命名config.h.generic为config.h,这是generic配置文件,需要根据具体的环境对预编译做相应修改。
      HAVE_BCOPY 1改为0,HAVE_INTTYPES_H 1改为0,HAVE_STDINT_H 1改为0。
      如果不修改,在下面编译dftables的步骤中会报错:

      pcre_internal.h(198) : fatal error C1083: Cannot open include file: 'inttypes.h': No such file or directory

    3. 重命名pcre.h.generic为pcre.h,重命名pcre_chartables.c.dist为pcre_chartables.c
    4. cl -MD -DHAVE_CONFIG_H dftables.c生成dftables.exe
    5. dftables.exe pcre_chartables.c (修改了一些注释,不知道目的何在)
    6. cl -O1 -MD -DHAVE_CONFIG_H -c pcre_chartables.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_compile.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_config.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_dfa_exec.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_exec.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_fullinfo.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_get.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_globals.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_info.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_maketables.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_newline.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_ord2utf8.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_refcount.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_study.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_tables.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_try_flipped.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_ucd.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_valid_utf8.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_version.c
      cl -O1 -MD -DHAVE_CONFIG_H -c pcre_xclass.c
      lib -out:pcre.lib pcre_chartables.obj pcre_compile.obj pcre_config.obj pcre_dfa_exec.obj pcre_exec.obj pcre_fullinfo.obj pcre_get.obj pcre_globals.obj pcre_info.obj pcre_maketables.obj pcre_newline.obj pcre_ord2utf8.obj pcre_refcount.obj pcre_study.obj pcre_tables.obj pcre_try_flipped.obj pcre_ucd.obj pcre_valid_utf8.obj pcre_version.obj pcre_xclass.obj
      最后生成的pcre.lib就是我们所需要的pcre库文件。
      【注意】,如果要编译debug版本的pcre.lib,请用-MDd替代-MD,否则项目会出现“MSVCRTD.lib(cinitexe.obj) : warning LNK4098: 默认库“msvcrt.lib”的问题。
    7. 拷贝pcre.h和pcre.lib到我们自己项目的目录,然后在源代码顶部加入以下代码:
      #include "pcre.h"
      #pragma comment(lib,"pcre.lib")
    8. 用一下代码测试:
      version= pcre_version();
      wchar_t *shit = (wchar_t *)malloc(strlen(version));
      MultiByteToWideChar(CP_ACP,0,version,-1,shit,wcslen(shit));
      MessageBox(hWnd,shit,shit,MB_OK);
  • 相关阅读:
    linux2.6.32在mini2440开发板上移植(2)之移植yaffs2
    Simhash算法原理和网页查重应用
    三句话影响人的一生
    Visual Studio 2008 可扩展性开发(一):VS概览
    PHP中用下划线开头的变量含义
    使用curses管理基于文本的屏幕--(五)
    simple.c
    c++中的计时器代码
    Hadoop为什么没有采用RAID?
    白羊座二:星星的一周
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9410113.html
Copyright © 2011-2022 技术员博客