您的位置:首页 > 编程语言 > PHP开发

在windows系统下用VC6编译最新版PHP5.3.3扩展(以vld为例)

2011-02-18 14:13 417 查看
本文以编译PHP的vld扩展为例来叙述如何在windows系统下使用VC(那个CYGWIN有点蛋疼)编译最新版PHP5.3.3,要编译完整的PHP代码包,则大同小异.

关键词:PHP5.3.3,PHP扩展开发,编译PHP

开始了:

环境:VC6.0,windowsXP ,PHP5.3.3

(1)下载PHP5.3.3的源代码包(http://www.php.net/)以及vld扩展源代码(http://pecl.php.net/package/vld/)。

解压,我的是解压在D盘根目录下,路径即为d:\php-5.3.3,把vld的源代码复制到\ext\vld目录下。

(2)在Windows平台启动 VC++ 6.0, 【文件】(File)->【新建】(New), 在 【工程】(Project)中选择 【Win32 Dynamic-Link Library】, 填写上 【工程名称】(Project Name) 和 【位置】(Location)。

(3)点击确定后,在第二屏选中 【一个空的DLL工程】(An empty DLL project), 点 【完成】Finish, 完成创建。此时会可能会弹出一个信息框,点击确定。

(4)选择左侧的【Source Files】,点击右键,选择【添加文件到目录】,将D:\php-5.3.3\ext\vld目录下的所有C文件添加到此目录,同样选择【Header Files】,添加所有的头文件到目录。





(5)修改工程设置,选择【工程】(Project)->【设置】(Settings)->【C/C++】,在【工程选项】(Project Options:)的 最后加上 /Tc,在预处理程序定义中添加如下宏定义:

ZEND_DEBUG=0,COMPILE_DL_VLD,ZTS=1,ZEND_WIN32,PHP_WIN32,HAVE_VLD=1

如果你需要编译其它扩展,请将COMPILE_DL_VLD 和 HAVE_VLD=1,后面的 “VLD” 改成和你要创建的工程名一致。





(6)、选择【连接】(Link),在【对象/库模块】(Object/library modules)添加php5ts.lib.

(7)、选择【工具】(Tools)->【选项】(Options)->【目录】(Directories),

在 【目录】(Show directories for:) 下拉框中选择 “Library files”,在 【路径】

(Directories) 中添加 D:\php-5.3.3 (即 php5ts.lib 所在目录)

在【目录】(Show directories for:) 下拉框中选择 “Include files”

在【路径】(Directories)中添加 D:\PHP-5.3.3 (即 ext、regex、win32 所在目录)

在【路径】(Directories)中添加 D:\PHP-5.3.3\MAIN

在【路径】(Directories)中添加D:\PHP-5.3.3\ZEND

在【路径】(Directories)中添加 D:\PHP-5.3.3\TSRM

(8)、选择【组建】->【组建】,此时可能会出现报错。

在php_vld.h文件的59行的函数参数列表里存在三个莫名其妙的点,将它们去掉就可以了。你懂的。

(9).继续组建,又报错了,还一大堆,还有警告一大把。警告不管,报错一看,是

Cannot open include file: '../main/config.w32.h',提示找不到文件,到main目录下一看,果然没有这个文件。是我下的源代码错了吗?不是的,是你不懂C。

(10)到根目录执行configure.bat文件,我擦,没反应,main目录下还是没生成这个文件。

(11)继续折腾。先下载2个必要的包

http://www.php.net/extra/bindlib_w32.zip

http://www.php.net/extra/win32build.zip

把这2个包的内容放一起,我都解压缩到D:\win32build

然后执行buildconf.bat

提示:

Rebuilding configure.js

Now run 'cscript /nologo configure.js --help'

接下来要临时设置一下环境变量,不然会提示找不到bison.exe:

Checking for bison.exe ... <not found>

ERROR: bison is required

命令行输入:set path=%path%;D:\win32build\bin

执行:cscript /nologo configure.js --with-php-build="../win32build" --without-libxml --disable-odbc

上面的参数务必补齐,不然出现一些错误也麻烦。详细的我就不说了。会删除一大串字符,等到

出现

Creating build dirs...

Generating files...

Generating Makefile

Generating main/internal_functions.c

Generating main/config.w32.h

Done.

说明build也就成功了。

(12)接着组建你的工程。我擦,还是不行,报错。一大堆的php_stream_transport.h error

形如

..\..\main\streams/php_stream_transport.h(85) : error C2143: syntax error : missing ')' before '*'

..\..\main\streams/php_stream_transport.h(85) : error C2081: 'socklen_t' : name in formal parameter list illegal

不用气馁,你快成功了,这是由于找不到宏报的语法错误。打开这个文件,添加typedef int socklen_t;

继续组建吧,我的孩子。

(13)再次组建吧,如果你人品没问题的话,祝福你,你成功了。

(14)在扩展下的Debug目录(D:\php-5.3.3\ext\vld\Debug)下有一个生成的dll文件。这就是我们所要的东东了!拷贝到EXT目录下,修改PHP.ini文件,你懂的。

最后,我们可以看看我的编译成功了没,执行这个扩展。

新建PHP文件

<?php

$a=array(1,3,5);

print_r($a);

命令行下执行

php -dvld.active=1 test.php





再次恭喜你,你真的成功了。

(15)很佩服你这么有耐心看完我的介绍。不过还是要最后说一句,你还在用windows开发,老土。。换Linux吧,开发扩展贼方便,装逼也装的酷一点。最后再再说一句,如果你按我说的一步一步来,还是不成功的话(很有这种可能)。那你就检讨去吧。请确认你仔细看过了上面的教程。你懂的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PHP 职场 休闲