pcre编译
A. jdk nginx. redis 在arm和x86要分别编译
一、注意openssl和pcre只需要把源码解压缩,不需要单独交叉编译!
开始的时候不知道,傻傻的把这两个库弄半天把它们编译过去了。谁知道nginx的--with-pcre和--with-openssl选项,指定的是这两个库源代码的路径,并非安装路径!nginx的编译系统只会从/usr、/usr/local等少数几个目录查找是否有预编译的pcre、zlib、openssl等库。对于交叉编译,直接把交叉编译后的pcre等安装在/usr、/usr/local显然不合适,因此需要使用--with-pcre和--with-openssl指定源代码的位置
二、交叉编译nginx
在x64 linux上面编译非常简单的nginx,没想到在交叉编译的时候巨多坑。下面一个configure是编译成功的配置
进入/usr/local/src目录,创建nginx文件夹。入刚创建的nginx目录,下载nginx的tar包,解压,进入解压生成的目录,进行配置(后面有补充,建议通读一遍)编译安装查找安装路径,在执行make编译时,可以添加要编译的参数,已安装完成,比如我现在要新增 http_stub_status_mole 模块参数,那么我只要把该参数添加进去然后重新编译即可,需要注意的是原先编译过的参数也要加进来。
进入nginx的安装目录,因为我安装的时候没有添加任何参数,所以这里我只需要执行
我这里只需要这一个模块,如果你安装的nginx还使用其他的模块,记得在上面的编译命令中加上。
另外,这里只能 make 千万别 make install,否则就覆盖安装了。
make完成后,在源码目录下会有一个objs目录,objs目录下就多了个nginx,这个就是新版本的程序了;
然后将objs目录下的nginx替换之前已经安装过的nginx(建议将旧的nginx程序做下备份)
,
B. 如何在Windows下通过Cmake编译和使用PCRE
CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。
通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。
如果有嵌套目录,子目录下可以有自己的CMakeLists.txt。
总之,CMake是一个非常强大的编译自动配置工具,支持各种平台,KDE也是用它编译的,感兴趣的可以试用一下。
准备活动:
(1)安装cmake。
下载地址:
根据自己的需要下载相应的包即可,Windows下可以下载zip压缩的绿色版本,还可以下载源代码。
Windows下CMake的使用
(2)运行cmake的方法。(GUI、命令行)
CMake使用步骤:
运行GUI的cmake界面:
cmake-2.8.1-win32-x86\bin\cmake-gui.exe
Windows下CMake的使用
执行Configure:
运行之后,生成了如下文件:
Windows下CMake的使用
生成Makefile:
执行Generate之后生成如下文件:
Windows下CMake的使用
运行make进行编译:
Windows下CMake的使用
编译完成后,在build目录生成Tutorial.exe,运行Tutorial.exe 25就可以看到运行结果:
Windows下CMake的使用
运行make install安装程序:
Windows下CMake的使用
运行make test进行测试:
Windows下CMake的使用
通过cmake tutorial学习CMake配置方法
可以在源代码的Tests/Turorial目录中找到这个手册对应的代码。
Windows下CMake的使用
1、Step1。
(如果不知道如何使用cmake,以及如何使用编译产生的Turorial.exe,可先看下前面“CMake使用步骤”的说明,它以Step4为例详细介绍了使用过程,Step1的配置可能不够完全,比如无法运行make install,无法运行make test,但可以参考。)
简单的程序编译。
(1)运行GUI的cmake,指定要编译的源代码路径和二进制文件路径(会自动创建)。
Windows下CMake的使用
(2)点击Configure,配置成功后,再点击Generate。
配置需要选择合适的编译器,虽然我安装了VC2008,但没有配置成功;选择Unix Makefiles,配置成功,它自动找到了DevC++下的gcc.exe等编译器。
Windows下CMake的使用
(3)在build3目录执行make,就能够编译生成Turorial.exe了。
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>make
Linking CXX executable Tutorial.exe
[100%] Built target Tutorial
可以运行一下Turorial.exe:
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>Tutorial.exe
Tutorial.exe Version 1.0
Usage: Tutorial.exe number
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>Tutorial.exe 4
The square root of 4 is 2
2、Step2
把子目录编译为库,并且链接到最终的可执行文件。
include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")
add_subdirectory (MathFunctions) # 使得子目录MathFunctions也能被编译
# add the executable
add_executable (Tutorial tutorial.cxx)
target_link_libraries (Tutorial MathFunctions)
产生makefile:
在GUI上点击Configure,之后Generate还是灰色,再次点击Configure,Generate就可以点击了。
编译:
C. pcre编译没有UTF支持问题,怎么解决
关于 PCRE_UTF8 support 问题
PHP错误:
preg_replace(): Compilation failed: this version of PCRE is not compiled with PCRE_UTF8 support
上面的报错会导致preg_replace出错,在wordpress中会引起上传图片后图片缺少路径,变成1.,2.等恶心的问题。
解决的办法如下:
1. pcre --version 查看pcre版本
2.到http://sourceforge.net/projects/pcre/files/pcre/ 下载对应版本的pcre
3.重新编译:./configure --enable-utf8
make make install
重启apache或者fpm,问题解决。
D. 如何 编译 ngx
一、必要软件准备
1.安装pcre
为了支持rewrite功能,我们需要安装pcre
复制代码代码如下:
# yum install pcre* //如过你已经装了,请跳过这一步
2.安装openssl
需要ssl的支持,如果不需要ssl支持,请跳过这一步
复制代码代码如下:
# yum install openssl*
3.gzip 类库安装
复制代码代码如下:
yum install zlib zlib-devel
4.安装wget
下载nginx使用,如果已经安装,跳过这一步
复制代码代码如下:
# yum install wget
二、安装nginx
1.下载
复制代码代码如下:
wget http://nginx.org/download/nginx-1.7.0.tar.gz
2.解压
复制代码代码如下:
tar -zxvf nginx-1.7.0.tar.gz
3.编译和安装
执行如下命令:
复制代码代码如下:
# cd nginx-1.7.0
# ./configure --prefix=/usr/local/nginx-1.7.0 \
--with-http_ssl_mole --with-http_spdy_mole \
--with-http_stub_status_mole --with-pcre
–with-http_stub_status_mole:支持nginx状态查询
–with-http_ssl_mole:支持https
–with-http_spdy_mole:支持google的spdy,想了解请网络spdy,这个必须有ssl的支持
–with-pcre:为了支持rewrite重写功能,必须制定pcre
最后输出如下内容,表示configure OK了。
复制代码代码如下:
checking for zlib library ... found
creating objs/Makefile
Configuration summary
+ using system PCRE library
+ using system OpenSSL library
+ md5: using OpenSSL library
+ sha1: using OpenSSL library
+ using system zlib library
nginx path prefix: "/usr/local/nginx-1.7.0"
nginx binary file: "/usr/local/nginx-1.7.0/sbin/nginx"
nginx configuration prefix: "/usr/local/nginx-1.7.0/conf"
nginx configuration file: "/usr/local/nginx-1.7.0/conf/nginx.conf"
nginx pid file: "/usr/local/nginx-1.7.0/logs/nginx.pid"
nginx error log file: "/usr/local/nginx-1.7.0/logs/error.log"
nginx http access log file: "/usr/local/nginx-1.7.0/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
# make //确定你的服务器有安装make,如果没有安装请执行yum install make
# make install
三、启动、关闭、重置nginx
启动:直接执行以下命令,nginx就启动了,不需要改任何配置文件,nginx配置多域名虚拟主机请参考后续文章.
复制代码代码如下:
/usr/local/nginx-1.7.0/sbin/nginx
试试访问:直接使用curl命令来读取web信息
复制代码代码如下:
[root@ns conf]
# curl -s http://localhost | grep nginx.com
nginx.com.
关闭:
复制代码代码如下:
/usr/local/nginx-1.7.0/sbin/nginx -s stop
重置:当你有修改配置文件的时候,只需要reload以下即可
复制代码代码如下:
/usr/local/nginx-1.7.0/sbin/nginx -s reload
整个nginx的安装就到这里结束了。
四、nginx编译参数详解
复制代码代码如下:
–prefix= 指向安装目录
–sbin-path 指向(执行)程序文件(nginx)
–conf-path= 指向配置文件(nginx.conf)
–error-log-path= 指向错误日志目录
–pid-path= 指向pid文件(nginx.pid)
–lock-path= 指向lock文件(nginx.lock)(安装文件锁定,防止安装文件被别人利用,或自己误操作。)
–user= 指定程序运行时的非特权用户
–group= 指定程序运行时的非特权用户组
–builddir= 指向编译目录
–with-rtsig_mole 启用rtsig模块支持(实时信号)
–with-select_mole 启用select模块支持(一种轮询模式,不推荐在高载环境下使用)禁用:–without-select_mole
–with-poll_mole 启用poll模块支持(功能与select相同,与select特性相同,为一种轮询模式,不推荐在高载环境下使用)
–with-file-aio 启用file aio支持(一种APL文件传输格式)
–with-ipv6 启用ipv6支持
–with-http_ssl_mole 启用ngx_http_ssl_mole支持(使支持https请求,需已安装openssl)
–with-http_realip_mole 启用ngx_http_realip_mole支持(这个模块允许从请求标头更改客户端的IP地址值,默认为关)
–with-http_addition_mole 启用ngx_http_addition_mole支持(作为一个输出过滤器,支持不完全缓冲,分部分响应请求)
–with-http_xslt_mole 启用ngx_http_xslt_mole支持(过滤转换XML请求)
–with-http_image_filter_mole 启用ngx_http_image_filter_mole支持(传输JPEG/GIF/PNG 图片的一个过滤器)(默认为不启用。gd库要用到)
–with-http_geoip_mole 启用ngx_http_geoip_mole支持(该模块创建基于与MaxMind GeoIP二进制文件相配的客户端IP地址的ngx_http_geoip_mole变量)
–with-http_sub_mole 启用ngx_http_sub_mole支持(允许用一些其他文本替换nginx响应中的一些文本)
–with-http_dav_mole 启用ngx_http_dav_mole支持(增加PUT,DELETE,MKCOL:创建集合,COPY和MOVE方法)默认情况下为关闭,需编译开启
–with-http_flv_mole 启用ngx_http_flv_mole支持(提供寻求内存使用基于时间的偏移量文件)
–with-http_gzip_static_mole 启用ngx_http_gzip_static_mole支持(在线实时压缩输出数据流)
–with-http_random_index_mole 启用ngx_http_random_index_mole支持(从目录中随机挑选一个目录索引)
–with-http_secure_link_mole 启用ngx_http_secure_link_mole支持(计算和检查要求所需的安全链接网址)
–with-http_degradation_mole 启用ngx_http_degradation_mole支持(允许在内存不足的情况下返回204或444码)
–with-http_stub_status_mole 启用ngx_http_stub_status_mole支持(获取nginx自上次启动以来的工作状态)
–without-http_charset_mole 禁用ngx_http_charset_mole支持(重新编码web页面,但只能是一个方向–服务器端到客户端,并且只有一个字节的编码可以被重新编码)
–without-http_gzip_mole 禁用ngx_http_gzip_mole支持(该模块同-with-http_gzip_static_mole功能一样)
–without-http_ssi_mole 禁用ngx_http_ssi_mole支持(该模块提供了一个在输入端处理处理服务器包含文件(SSI)的过滤器,目前支持SSI命令的列表是不完整的)
–without-http_userid_mole 禁用ngx_http_userid_mole支持(该模块用来处理用来确定客户端后续请求的cookies)
–without-http_access_mole 禁用ngx_http_access_mole支持(该模块提供了一个简单的基于主机的访问控制。允许/拒绝基于ip地址)
–without-http_auth_basic_mole禁用ngx_http_auth_basic_mole(该模块是可以使用用户名和密码基于http基本认证方法来保护你的站点或其部分内容)
–without-http_autoindex_mole 禁用disable ngx_http_autoindex_mole支持(该模块用于自动生成目录列表,只在ngx_http_index_mole模块未找到索引文件时发出请求。)
–without-http_geo_mole 禁用ngx_http_geo_mole支持(创建一些变量,其值依赖于客户端的IP地址)
–without-http_map_mole 禁用ngx_http_map_mole支持(使用任意的键/值对设置配置变量)
–without-http_split_clients_mole 禁用ngx_http_split_clients_mole支持(该模块用来基于某些条件划分用户。条件如:ip地址、报头、cookies等等)
–without-http_referer_mole 禁用disable ngx_http_referer_mole支持(该模块用来过滤请求,拒绝报头中Referer值不正确的请求)
–without-http_rewrite_mole 禁用ngx_http_rewrite_mole支持(该模块允许使用正则表达式改变URI,并且根据变量来转向以及选择配置。如果在server级别设置该选项,那么他们将在 location之前生效。如果在location还有更进一步的重写规则,location部分的规则依然会被执行。如果这个URI重写是因为location部分的规则造成的,那么 location部分会再次被执行作为新的URI。 这个循环会执行10次,然后Nginx会返回一个500错误。)
–without-http_proxy_mole 禁用ngx_http_proxy_mole支持(有关代理服务器)
–without-http_fastcgi_mole 禁用ngx_http_fastcgi_mole支持(该模块允许Nginx 与FastCGI 进程交互,并通过传递参数来控制FastCGI 进程工作。 )FastCGI一个常驻型的公共网关接口。
–without-http_uwsgi_mole 禁用ngx_http_uwsgi_mole支持(该模块用来医用uwsgi协议,uWSGI服务器相关)
–without-http_scgi_mole 禁用ngx_http_scgi_mole支持(该模块用来启用SCGI协议支持,SCGI协议是CGI协议的替代。它是一种应用程序与HTTP服务接口标准。它有些像FastCGI但他的设计 更容易实现。)
–without-http_memcached_mole 禁用ngx_http_memcached_mole支持(该模块用来提供简单的缓存,以提高系统效率)
-without-http_limit_zone_mole 禁用ngx_http_limit_zone_mole支持(该模块可以针对条件,进行会话的并发连接数控制)
–without-http_limit_req_mole 禁用ngx_http_limit_req_mole支持(该模块允许你对于一个地址进行请求数量的限制用一个给定的session或一个特定的事件)
–without-http_empty_gif_mole 禁用ngx_http_empty_gif_mole支持(该模块在内存中常驻了一个1*1的透明GIF图像,可以被非常快速的调用)
–without-http_browser_mole 禁用ngx_http_browser_mole支持(该模块用来创建依赖于请求报头的值。如果浏览器为modern ,则$modern_browser等于modern_browser_value指令分配的值;如 果浏览器为old,则$ancient_browser等于 ancient_browser_value指令分配的值;如果浏览器为 MSIE中的任意版本,则 $msie等于1)
–without-http_upstream_ip_hash_mole 禁用ngx_http_upstream_ip_hash_mole支持(该模块用于简单的负载均衡)
–with-http_perl_mole 启用ngx_http_perl_mole支持(该模块使nginx可以直接使用perl或通过ssi调用perl)
–with-perl_moles_path= 设定perl模块路径
–with-perl= 设定perl库文件路径
–http-log-path= 设定access log路径
–http-client-body-temp-path= 设定http客户端请求临时文件路径
–http-proxy-temp-path= 设定http代理临时文件路径
–http-fastcgi-temp-path= 设定http fastcgi临时文件路径
–http-uwsgi-temp-path= 设定http uwsgi临时文件路径
–http-scgi-temp-path= 设定http scgi临时文件路径
-without-http 禁用http server功能
–without-http-cache 禁用http cache功能
–with-mail 启用POP3/IMAP4/SMTP代理模块支持
–with-mail_ssl_mole 启用ngx_mail_ssl_mole支持
–without-mail_pop3_mole 禁用pop3协议(POP3即邮局协议的第3个版本,它是规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件的协议。是因特网电子邮件的第一个离线协议标 准,POP3协议允许用户从服务器上把邮件存储到本地主机上,同时根据客户端的操作删除或保存在邮件服务器上的邮件。POP3协议是TCP/IP协议族中的一员,主要用于 支持使用客户端远程管理在服务器上的电子邮件)
–without-mail_imap_mole 禁用imap协议(一种邮件获取协议。它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。IMAP协议运行在TCP/IP协议之上, 使用的端口是143。它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。)
–without-mail_smtp_mole 禁用smtp协议(SMTP即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。)
–with-google_perftools_mole 启用ngx_google_perftools_mole支持(调试用,剖析程序性能瓶颈)
–with-cpp_test_mole 启用ngx_cpp_test_mole支持
–add-mole= 启用外部模块支持
–with-cc= 指向C编译器路径
–with-cpp= 指向C预处理路径
–with-cc-opt= 设置C编译器参数(PCRE库,需要指定–with-cc-opt=”-I /usr/local/include”,如果使用select()函数则需要同时增加文件描述符数量,可以通过–with-cc- opt=”-D FD_SETSIZE=2048”指定。)
–with-ld-opt= 设置连接文件参数。(PCRE库,需要指定–with-ld-opt=”-L /usr/local/lib”。)
–with-cpu-opt= 指定编译的CPU,可用的值为: pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64
–without-pcre 禁用pcre库
–with-pcre 启用pcre库
–with-pcre= 指向pcre库文件目录
–with-pcre-opt= 在编译时为pcre库设置附加参数
–with-md5= 指向md5库文件目录(消息摘要算法第五版,用以提供消息的完整性保护)
–with-md5-opt= 在编译时为md5库设置附加参数
–with-md5-asm 使用md5汇编源
–with-sha1= 指向sha1库目录(数字签名算法,主要用于数字签名)
–with-sha1-opt= 在编译时为sha1库设置附加参数
–with-sha1-asm 使用sha1汇编源
–with-zlib= 指向zlib库目录
–with-zlib-opt= 在编译时为zlib设置附加参数
–with-zlib-asm= 为指定的CPU使用zlib汇编源进行优化,CPU类型为pentium, pentiumpro
–with-libatomic 为原子内存的更新操作的实现提供一个架构
–with-libatomic= 指向libatomic_ops安装目录
–with-openssl= 指向openssl安装目录
–with-openssl-opt 在编译时为openssl设置附加参数
–with-debug 启用debug日志
E. c语言 正则库 pcre 教程 (windows环境)
1、编译PCRE正则表达式库
(1) (MinGW + MSYS)
将PCRE源码包直接拷贝到MSYS目录下,(如:C:\MSYS\1.0\pcre\)
运行msys.bat启动MSYS,
在命令行输入
cd / // 回根目录
cd pcre // 进入PCRE目录
./configure // 配置编译
make // 编译全部
完成后,会在C:\MSYS\1.0\pcre\.libs\ 下生成所需要的文件:
libpcre-0.dll // PCRE的动态链接库
libpcre.dll.a // 调用PCRE动态链接库所用的LIB
libpcre.a // PCRE静态链接库
再配合上C:\MSYS\1.0\pcre\目录下的"pcre.h",就可以在程序中加入正则表达式支持了:)
(2) (于windows平台手动编译pcre,转载)
将 config.h.generic 重命名为 config.h
设置其中的 HAVE_BCOPY 参数为 0 (因为windows平台无b()函数)
重命名 pcre.h.generic 为 pcre.h.
重命名 pcre_chartables.c.dist 为 pcre_chartables.c.
编译 dftables.c 成可执行文件,要加入参数 -DHAVE_CONFIG_H,以便导入 config.h 文件中的设置
/* 重命名 pcre_chartables.c.dist 为 pcre_chartables.c */
运行编译的可执行文件 dftables.exe ,参数为 pcre_chartables.c
即 dftables.exe pcre_chartables.c
新建工程,包含下列文件,编译成lib文件即可
pcre_internal.h
ucp.h
ucpinternal.h
ucptable.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_ucp_searchfuncs.c
pcre_valid_utf8.c
pcre_version.c
pcre_xclass.c
这样就可以生成 libpcre.a 文件了 (vc,bcc生成的是pcre.lib,大同小异)
2、使用生成的 libpcre.a (静态链接库)
在你的程序中添加:
#define PCRE_STATIC // 开启静态链接库支持(一定要添加该行,否则无法使用静态链接库)
#include "pcre.h" // PCRE头文件
并且添加 libpcre.a 到工程中,然后就可以在程序中使用PCRE函数了:)
编译选项 添加 /MT ,无头文件预编译.
3、使用生成的 libpcre-0.dll 和 libpcre.dll.a (动态链接库)
在你的程序中添加:
#include "pcre.h" // PCRE头文件
并且添加 libpcre.dll.a 到工程中,然后就可以在程序中使用PCRE函数了:)
================================================================================
命令行下的批处理解决方法 .如果已经下载,可以不用第一行.
goto START
首先确保控制台环境中有:
1、VC6命令行编译环境
2、wget.exe、unzip.exe、sed.exe、mv.exe
然后执行这个批处理文件,就可以得到VC版本的pcr.lib。
:START
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.7.zip
unzip pcre-7.7.zip
cd pcre-7.7
sed -e "s/#define HAVE_BCOPY 1/#define HAVE_BCOPY 0/g" config.h.generic > config.h
mv pcre.h.generic pcre.h
mv pcre_chartables.c.dist pcre_chartables.c
cl -MD -DHAVE_CONFIG_H dftables.c
dftables.exe pcre_chartables.c
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_ucp_searchfuncs.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:libpcr.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_ucp_searchfuncs.obj pcre_valid_utf8.obj pcre_version.obj pcre_xclass.obj
这样就出来了: pcre.h + libpcr.lib
==============================================================================
最近使用VC编译了一下她的源代码,其实步骤很简单, 如下
1 一些源文件改名
config.h.generic 改名为 config.h (注意里面的配置)
pcre.h.generic 改名为 pcre.h
pcre_chartables.c.dist 改名为 pcre_chartables.c
2 建立VC工程
建立一个VC的DLL工程,去掉原有的包含文件
将PCRE的所有pcre_*.c都加进去, pcre后面没有_的不要加, 后缀名是.cc的不要加
可以参考上面的.还有.h 文件也是要的.
3 修改工程设置
增加工程预编译宏 HAVE_CONFIG_H
不使用预编译头 Not Using Precompiled Headers
编译选项 添加 /MT
OK 完成以上三步,就可以在 VC 上编译通过了。
4 编译结果
使用时只需要编译出来的 .DLL .Lib 和 源代码目录的 pcre.h
F. PCRE使用时编译错误
编译提示:_memmove _strncmp这些STD函数被重定义了.
你的 pcre.lib 中包含了 libc.lib库.
试: 打开工程配置对话框->连接器->输入-."忽略所有默认库",选是.看看咋样
G. 如何在线安装pcre
PCRE的安装及使用
1、主页地址:www pcre org
下载pcre-8.13 tar bz2
2、解压缩:
tar xjpf pcre-8.13 tar bz2
3、配置:
cd pcre-8.13
./configure --prefix=/usr/local/pcre-8.13 --libdir=/usr/local/lib/pcre --includedir=/usr/local/include/pcre
configure有许多参数可配,具体参见./configure --help及手册
4、编译:
make
5、安装:
make install
6、将库文件导入cache:
方法1:在/etc/ld.so.conf中加入: /usr/local/lib/pcre,然后运行ldconfig
方法2:在/etc/ld.so.conf.d/下新生成一个文件(或在其中的文件中加入同样内容),文件内容为:
/usr/local/lib/pcre,然后运行ldconfig
7、编译自带的demo程序
gcc -Wall pcredemo.c -I/usr/local/include/pcre -L/usr/local/lib/pcre -lpcre -o pcredemo
8、执行
./pcredemo -g 'cat|dog' 'the dog sat on the cat'
./pcredemo 'cat|dog' 'the cat sat on the mat'
安装过程遇到的问题,在ubuntu 10.04下,如果直接./configure;make;make intall的话,默认安装的目录是/usr/local/,但是,即使用
gcc -Wall pcredemo.c -I/usr/local/include -L/usr/local/lib -lpcre -o pcredemo
编译,执行时会出现./pcredemo: error while loading shared libraries: libpcre.so.0: cannot open shared object file: No such file or directory
错误的原因是没用用ldconfig加载库文件到cache。只需按第6步将库文件加载到cache就行