在C或C++代码中常遇到从一堆数据中提取某个字段,苦于C或C++没有标准的正则表达式库,只好动手编译一个。综合比较后,选择了pcre。
下面开始动手编译。
1、首先从网站上下载了7.8版本,网址是http://sourceforge.net/projects/pcre/files/pcre/7.8/
下载完成后将压缩包解压。
2、在解压后的根目录里面找到NON-UNIX-USE这个文件,里面有关于非unix系统或者不支持confige和make工具的情况下,如何编译pcre的方法
3、按照NON-UNIX-USE里面的介绍,首先把config.h.generic 重命名为 config.h, 把pcre.h.generic 重命名为 pcre.h, pcre_chartables.c.dist 重命名为 pcre_chartables.c
4、接下来创建test目录,在test目录下面创建jni目录,在jni目录下创建pcre-7.8目录。把以下文件
config.h
pcre.h
pcre_internal.h
ucp.h
pcre_chartables.c
pcre_compile.c
pcre_config.c
pcre_dfa_exec.c
pcre_exec.c
pcre_fullinfo.c
pcre_get.c
pcre_globals.c
pcre_info.c
pcre_maketables.c
pcre_newline.c
pcre_ord2utf8.c
pcre_refcount.c
pcre_study.c
pcre_tables.c
pcre_try_flipped.c
pcre_ucd.c
pcre_valid_utf8.c
pcre_version.c
pcre_xclass.c
都拷贝到pcre-7.8目录下,然后在jni目录下创建Android.mk,该文件内容如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
#获取所有C文件
LOCAL_SRC_FILES:=$(wildcard $(LOCAL_PATH)/pcre-7.8/*.c)
#将文件路径前面的jni/去掉
LOCAL_SRC_FILES:=$(patsubst jni/%,%, $(LOCAL_SRC_FILES))
LOCAL_CFLAGS := -Dyylval=pcre_lval -DHAVE_CONFIG_H -D_U_="__attribute__((unused))"
LOCAL_CFLAGS += -Ipcre-7.8
LOCAL_MODULE:= pcre
include $(BUILD_SHARED_LIBRARY)
以上就算完成了。然后执行ndk命令(我的是D:\tools\android\android-ndk-r8d\ndk-build),就可以完成编译了,最终生成libpcre.so动态库
下面是编译windows版本
1.把上述所有头文件和c文件加入到项目中
2.增加工程预编译宏 HAVE_CONFIG_H, 同时不使用预编译头 Not Using Precompiled Headers
接下来就可以直接编译通过
windows下作为第三方库加入到自己的项目,会产生生成的exe文件启动不起来的问题。可以把pcre的源码直接加入到自己的项目,而不是以第三方库的方式加入,这样最终生成的可执行程序就可以运行了