Windows下编译PHP5.4和xdebug全记录
实际上我最终目的是编译得到支持PHP5.4的php_xdebug.dll,而在此之前,成功编译PHP5.4是必须的。
编译环境以及相关软件包:
1.MicrosoftVisualC++2008ExpressEditionwithSP1
2.WindowsSDK6.1
3.PHPSDKBinaryTools
4.Dependablelibs
5.PHP5.4Sources
6.Xdebug2.2.0-dev
如果你需要的是VC6的编译环境,那么你需要安装VisualC++6.0,而SDK则需要换成:
WindowsServer2003PSDK
编译过程:
准备好咖啡、可乐,做好准备,可能要折腾数小时…
安装VC++2008以及WindowsSDK6.1
建立如下目录:
D:\php-sdk D:\php-sdk\php54dev D:\php-sdk\pecl
解压php-sdk-binary-tools-20110915.zip中的所有文件至D:\php-sdk
提取deps-5.4-vc9-x86.7z中的deps目录至D:\php-sdk\php54dev
解压php5.4源码至D:\php-sdk\php54dev,目录名任取,比如php-5.4.0RC3
xdebug的源码放到D:\php-sdk\pecl\xdebug
最终的目录结构大概是这样子的:
D:\php-sdk>treeD:\php-sdk FolderPATHlistingforvolumeDISK_VOL2 Volumeserialnumberis0C74-AD73 D:\PHP-SDK ├───bin ├───php54dev │ ├───deps │ │ ├───bin │ │ ├───include │ │ ├───lib │ │ └───sybase │ ├───pecl │ │ └───xdebug │ └───php-5.4.0RC3 ├───script └───share
打开WindowsSDKCMDShell,执行:setenv/x86/xp/release,如果你是64位系统,那么这个命令是必须的,不要试图把参数改成/x64,否则后续的make阶段,你会看到成千上万条WARNING…
设定PATH:setPATH=D:\php-sdk\bin;%PATH%
切换SHELL目录至D:\php-sdk\php54dev\php-5.4.0RC3>,执行buildconf生成configure脚本:
D:\php-sdk\php54dev\php-5.4.0RC3>buildconf Rebuildingconfigure.js Nowrun'configure--help' D:\php-sdk\php54dev\php-5.4.0RC3>
执行configure生成Make脚本,可以查看configure–help以获取更多编译选项:
D:\php-sdk\php54dev\php-5.4.0RC3>configure--disable-snapshot-build--disable-debug-pack--disable-ipv6--disable-zts--disable-isapi--disable-nsapi--without-t1lib--without-mssql--without-pdo-mssql--without-pi3web--without-enchant--enable-com-dotnet--with-mcrypt=static--disable-static-analyze--with-xdebug=shared
这里我使用了–disable-snapshot-build关掉了snapshot模式,因为这个命令会强制开启许多对我来说无用的选项,比如aolserver,apachesapi之类的,最后我加上了–with-xdebug=shared,在使用这个选项之前最好确认xdebug源码的位置正确,如果没什么问题的话,buildconf之后,在configure–help中你可以看到这个选项,shared表示编译成动态链接库。
如果你要编译其它的pecl扩展(比如apc,bcompiler等),只需要相关的源码下载放到pecl目录,重新执行buildconf即可。
若configure无问题,最后执行nmake开始编译过程,GoodLuck!:)
最后一步nmakesnap,组织所有编译好的文件的目录结构(也就是你平时下载的PHP二进制包的结构),并用zip打包。
最终生成的文件位置:D:\php-sdk\php54dev\php-5.4.0RC3\Release(_TS)
错误处理:
nmake过程中会产生很多的Warning,只要不中断,那么就无视好了。
关于calendar.c和jewish.c的编码问题:
ext\calendar\calendar.c:warningC4819:Thefilecontainsacharacterthatcannotberepresentedinthecurrentcodepage(936).SavethefileinUnicodeformattopreventdataloss dow.c easter.c french.c gregor.c jewish.c ext\calendar\jewish.c:warningC4819:Thefilecontainsacharacterthatcannotberepresentedinthecurrentcodepage(936).SavethefileinUnicodeformattopreventdataloss ext\calendar\jewish.c(324):errorC2001:newlineinconstant ext\calendar\jewish.c(325):errorC2001:newlineinconstant ext\calendar\jewish.c(326):errorC2001:newlineinconstant ext\calendar\jewish.c(327):errorC2001:newlineinconstant NMAKE:fatalerrorU1077:'"C:\ProgramFiles(x86)\MicrosoftVisualStudio9.0\VC\Bin\cl.exe"':returncode'0x2' Stop.
这两个文件使用的是ANSI编码,包含有一些西文的特殊字符,GBK字符集中不存在。
可用editplus打开,编码选择:WestEuropean(Windows),另存为UTF-8。