在windows系统下用VC6编译最新版PHP5.3.3扩展(以vld为例)
在windows系统下用VC6编译最新版PHP5.3.3扩展(以vld为例)
关键词: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吧,开发扩展贼方便,装逼也装的酷一点。最后再再说一句,如果你按我说的一步一步来,还是不成功的话(很有这种可能)。那你就检讨去吧。请确认你仔细看过了上面的教程。你懂的。
本文来自:白菜博客。
http://aiyooyoo.com
微信赞赏支付宝赞赏