Windows下编译PHP5.4和xdebug全记录


Posted in PHP onApril 03, 2015

实际上我最终目的是编译得到支持 PHP5.4 的 php_xdebug.dll,而在此之前,成功编译 PHP5.4 是必须的。

编译环境以及相关软件包:
1.Microsoft Visual C++ 2008 Express Edition with SP1
2.Windows SDK 6.1
3.PHP SDK Binary Tools
4.Dependable libs
5.PHP5.4 Sources
6.Xdebug 2.2.0-dev
如果你需要的是 VC6 的编译环境,那么你需要安装 Visual C++ 6.0,而 SDK 则需要换成:
Windows Server 2003 PSDK

编译过程:

准备好咖啡、可乐,做好准备,可能要折腾数小时…

安装 VC++ 2008 以及 Windows SDK 6.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>tree D:\php-sdk

Folder PATH listing for volume DISK_VOL2

Volume serial number is 0C74-AD73

D:\PHP-SDK

├───bin

├───php54dev

│   ├───deps

│   │   ├───bin

│   │   ├───include

│   │   ├───lib

│   │   └───sybase

│   ├───pecl

│   │   └───xdebug

│   └───php-5.4.0RC3

├───script

└───share

打开 Windows SDK CMD Shell,执行:setenv /x86 /xp /release,如果你是64位系统,那么这个命令是必须的,不要试图把参数改成 /x64,否则后续的 make 阶段,你会看到成千上万条 WARNING …

设定 PATH:set PATH=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

Rebuilding configure.js

Now run '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,apache sapi 之类的,最后我加上了 ?with-xdebug=shared,在使用这个选项之前最好确认 xdebug 源码的位置正确,如果没什么问题的话,buildconf 之后,在 configure ?help 中你可以看到这个选项,shared 表示编译成动态链接库。

如果你要编译其它的 pecl 扩展(比如 apc,bcompiler 等),只需要相关的源码下载放到 pecl 目录,重新执行 buildconf 即可。

若 configure 无问题,最后执行 nmake 开始编译过程,Good Luck! :)

最后一步 nmake snap,组织所有编译好的文件的目录结构(也就是你平时下载的 PHP 二进制包的结构),并用 zip 打包。

最终生成的文件位置:D:\php-sdk\php54dev\php-5.4.0RC3\Release(_TS)

错误处理:
nmake 过程中会产生很多的 Warning,只要不中断,那么就无视好了。

关于 calendar.c 和 jewish.c 的编码问题:

ext\calendar\calendar.c : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss

dow.c

easter.c

french.c

gregor.c

jewish.c

ext\calendar\jewish.c : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss

ext\calendar\jewish.c(324) : error C2001: newline in constant

ext\calendar\jewish.c(325) : error C2001: newline in constant

ext\calendar\jewish.c(326) : error C2001: newline in constant

ext\calendar\jewish.c(327) : error C2001: newline in constant

NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\Bin\cl.exe"' : return code '0x2'

Stop.

这两个文件使用的是 ANSI 编码,包含有一些西文的特殊字符,GBK 字符集中不存在。
可用 editplus 打开,编码选择:West European (Windows),另存为 UTF-8。
PHP 相关文章推荐
PHP数据库开发知多少
Oct 09 PHP
给多个地址发邮件的类
Oct 09 PHP
仿AS3实现PHP 事件机制实现代码
Jan 27 PHP
php中获取关键词及所属来源搜索引擎名称的代码
Feb 15 PHP
PHP高级对象构建 工厂模式的使用
Feb 05 PHP
PHP合并两个数组的两种方式的异同
Sep 14 PHP
PHP写的资源下载防盗链类分享
May 12 PHP
Smarty中调用FCKeditor的方法
Oct 27 PHP
培养自己的php编码规范
Sep 28 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
Mar 07 PHP
php实现文件上传及头像预览功能
Jan 15 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
Apr 08 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
Apr 03 #PHP
php实现在限定区域里自动调整字体大小的类实例
Apr 02 #PHP
php实现专业获取网站SEO信息类实例
Apr 02 #PHP
php获得网站访问统计信息类Compete API用法实例
Apr 02 #PHP
php实现从上传文件创建缩略图的方法
Apr 02 #PHP
php调用KyotoTycoon简单实例
Apr 02 #PHP
PHP中数据类型转换的三种方式
Apr 02 #PHP
You might like
简单的php写入数据库类代码分享
2011/07/26 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
php实现过滤字符串中的中文和数字实例
2015/07/29 PHP
Prototype中dom对象方法汇总
2008/09/17 Javascript
Javascript中的String对象详谈
2014/03/03 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
2014/03/28 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
javascript动态修改Li节点值的方法
2015/01/20 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
JS字符串的切分用法实例
2016/02/22 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
JavaScript仿微信打飞机游戏
2020/07/05 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
JS中call和apply函数用法实例分析
2018/06/20 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
Python Web框架Pylons中使用MongoDB的例子
2013/12/03 Python
python实现员工管理系统
2018/01/11 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
Python json模块与jsonpath模块区别详解
2020/03/05 Python
50个强大璀璨的CSS3/JS技术运用实例
2010/02/27 HTML / CSS
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
英国百年闻名的优质健康产品连锁店:Holland & Barrett
2019/12/19 全球购物
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
水污染治理专业毕业生推荐信
2013/11/14 职场文书
网管求职信
2014/03/03 职场文书
奥运会口号
2014/06/13 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js
源码安装apache脚本部署过程详解
2022/09/23 Servers