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

实际上我最终目的是编译得到支持 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。

(0)

相关推荐

  • php 启动报错如何解决

    复制代码 代码如下: [root@abc lnmp]# service php-fpm start Starting php-fpm eAccelerator: Could not allocate 67108864 bytes, the maximum size the kernel allows is 33554432 bytes. Lower the amount of memory request or increase the limit in /proc/sys/kernel/shm

  • php5.4传引用时报错问题分析

    本文实例分析了php5.4传引用时报错问题.分享给大家供大家参考,具体如下: php5.3系列版本以及以前版本,传引用没有什么问题,升级到php5.4以后,传引用的地方,全报错 Fatal error: Call-time pass-by-reference has been removed in F:\work\wamp\www\test\test.php on line 6.看一下下面的例子. 例1,递归传引用,在php 5.3及以及版本,测试结果 <?php function test($

  • 如何把php5.3版本升级到php5.4或者php5.5

    今天我们这篇php的技术文章主要为各位朋友们介绍如何使用yum进行安装php的5.4或者5.5版本.当然我们使用centos6.5作为我们的测试机器.其实非常简单,只要下面的两个命令就可以轻松的进行安装php的5.4版本了. 复制代码 代码如下: yum remove php php-bcmath php-cli php-common php-devel php-fpm  php-gd php-imap php-ldap php-mbstring php-mcrypt php-mysql  ph

  • php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错

    在php5.3环境下运行,常常会出现 Deprecated: Function ereg() is deprecated in...和Deprecated: Function ereg_replace() is deprecated in...这些类型的报错提示. 其原因在于:php5.3以上的版本不支持ereg()函数,而是使用preg_match()函数:不支持ereg_replace()函数,而使用preg_replace()函数. 解决方法:将不支持的函数修改为支持的函数即可.   例如

  • php 启动时报错的简单解决方法

    php 启动报错 复制代码 代码如下: [root@abc lnmp]# service php-fpm start Starting php-fpm eAccelerator: Could not allocate 67108864 bytes, the maximum size the kernel allows is 33554432 bytes. Lower the amount of memory request or increase the limit in /proc/sys/k

  • PHP5.4中json_encode中文转码的变化小结

    在php5.4以前做json_encode的时候中文会被unicode编码,中文都会被编码,变成不可读的,类似"\u***"的格式,还会在一定程度上增加传输的数据量. 例如: 复制代码 代码如下: <?php $str = '中文'; echo json_encode($str); //"\u4e2d\u6587" php5.4开始 echo json_encode($str, JSON_UNESCAPED_UNICODE); //"中文"

  • 安装apache2.2.22配置php5.4(具体操作步骤)

    修改 apache2.2/httpd.conf 配置文件,让apache能够解析php文件 #修改监听端口Listen 8011 #在LoadModule的最后一段后面添加下面一句话LoadModule php5_module "E:/LAMP/php5.4/php5apache2_2.dll" #修改服务器网站目录为 E:/LAMP/wwwDocumentRoot "E:/LAMP/www"#同时还有一个地方要改<Directory "E:/LAM

  • 探寻PHP脚本不报错的原因

    那么如果PHP脚本不报语法错,会是什么原因呢: 1. 一般的集成环境,默认会开启错误报告; 但在linux系统中,使用软件包安装的就不一定了, 此时可以查看PHP配置文件,打开错误报告 => 复制代码 代码如下: display_errors = On /* PHP配置文件路径:/uer/local/php/etc/php.ini  */ 注:PHP脚本中动态设置php.ini配置文件的方法 => 复制代码 代码如下: ini_set('display_errors', 'On'); /* 显

  • php5.4以下版本json不支持不转义内容中文的解决方法

    本文实例讲述了php5.4以下版本json不支持不转义内容中文的解决方法.分享给大家供大家参考.具体分析如下: 写ERP接口的时候遇到JAVA方接收这种json_encode后的内容 复制代码 代码如下: {"orderCode":"1401160935542399","creator":"\u751f\u6d3b\u7528\u54c1\u6d4b\u8bd5\u5c0f\u5c4b"} 其中"creator&qu

  • php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总

    从旧版升级到php5.4,恐怕最麻烦的就是htmlspecialchars这个问题了!当然,htmlentities也会受影响,不过,对于中文站来说一般用htmlspecialchars比较常见,htmlentities非常少用到. 可能老外认为网页普遍应该是utf-8编码的,于是苦了那些用GB2312,GBK编码的中文站......! 具体表现: 复制代码 代码如下: $str = "9enjoy.com的php版本是5.2.10"; echo htmlspecialchars($s

  • PHP empty函数报错解决办法

    PHP开发时,当你使用empty检查一个函数返回的结果时会报错:Fatal error: Can't use function return value in write context 例如下面的代码: 复制代码 代码如下: <?php echo empty(strlen('test')); 转到PHP手册里面查看,在empty函数描述的地方有以下文字: 复制代码 代码如下: Note :  empty()  only checks variables as anything else wil

  • 注意:php5.4删除了session_unregister函数

    前几天安装了dedecms系统,当在后台安全退出的时候,后台出现空白,先前只分析其他功能去了,也没太注意安全,看了一下安全退出的代码,是这样写的: 复制代码 代码如下: function exitUser()  {    ClearMyAddon();    @($this->keepUserIDTag);    @session_unregister($this->keepUserTypeTag);    @session_unregister($this->keepUserChann

随机推荐