日期:2014-05-17  浏览次数:20452 次

在Windows下编译安装AMFEXT for PHP5.3
AMFEXT官方未提供PHP5.3版的dll文件,不得不自己动手编译,以下是编译小记:

1. 下载必要的软件.
1). PHP5.3 for Win32二进制和源代码各一份
2). VC6或以上IDE
3). Cygwin.
4). 两个必要的包
http://www.php.net/extra/bindlib_w32.zip
http://www.php.net/extra/win32build.zip
5). 下载amfext 0.9.2-dev版

2. 解压缩软件到适当目录
1). 解压缩php二进制代码到e:\php5.3.6目录(其实我们只感兴趣dev子目录下的php5ts.lib文件)
2). 解压缩php源代码到e:\php5.3.6-sources目录
3). 解压缩amfext 0.9.2到e:\php5.3.6-sources\ext\amfext目录下
4). 解压缩bindlib_w32.zip和win32build.zip到同样目录(如:c:\win32build)
设置路径set path=%path%;c:\win32build\bin

3. 编译amfext VC工程
1). 打开amfext.dsp工程文件
2). 设置工程
Project->Settings(Win32 Release)->Link 为:e:\php5.3.6\dev\php5ts.lib
Build->Set Active Project Configuration选中amftext - Win32 Release.
3). 编译amfext
由于amfext for php5.3有个bug,所以编译之前要修改amf.c
    //On line 1188, replace:  
    int deallocResult = (*struc)->refcount;  
    //with  
    int deallocResult = Z_REFCOUNT_PP(struc); 
    
    //On line 2674, replace:
    newval->refcount--;
    //with
    Z_DELREF_P(newval);

现在按F7编译工程,提示
Cannot open include file: '../main/config.w32.h',提示找不到文件,到php源代码的字母main目录下一看,果然没有这个文件,要自己生成这个文件:
步骤1. 到PHP源代码根目录执行buildconf.bat
步骤2. 到PHP源代码根目录执行configure.bat(或者执行 cscript /nologo configure.js --with-php-build="../win32build" --without-libxml  --disable-odbc)
如果没有之前的set path=%path%;D:\win32build\bin会出现如下提示:
Checking for bison.exe ... <not found>
ERROR: bison is required

重新编译工程,报错。一大堆的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;

到文件头部。

重新编译工程,不出意外在php源代码ext子目录就可以看到php_amf.dll
1 楼 wanluoliang 2011-07-12  
非常感谢你的教程。。。。。。。。。。。。。。
2 楼 live711 2011-08-13  
你编译的dll能下载过来直接用吗?