安卓下编译pcre

来源:互联网 发布:中国手机网民最新数据 编辑:程序博客网 时间:2024/05/30 20:07

在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的源码直接加入到自己的项目,而不是以第三方库的方式加入,这样最终生成的可执行程序就可以运行了

0 0
原创粉丝点击