php升级到7.2了 打算开始使用php7.2,但是我经常使用的一个扩展judy 没有官方编译后的版本...所以打算自己编译..

参考文章: http://blog.51cto.com/lancelot/2054953
<http://blog.51cto.com/lancelot/2054953>  windows下编译php7.2扩展memcache

1.编译环境搭建

(1)php7.2的编译(windows环境)有几个重要的不同.

1.php7.2采用 vc15(vs2017)编译

2.php7.2的php-sdk <http://windows.php.net/downloads/php-sdk/> dsp
不在以前的页面提供下载了(换地址了)

3.编译环境搭建更加简单一些了.

 

(2)具体环境搭建

一.安装vc15编译器

 

vs2017把编译器 和 ide 分开了,因为我们只需要编译器所以就不安装vs2017了(直接安装vs2017 免费版也可以)

http://landinghub.visualstudio.com/visual-cpp-build-tools

点击 下载地址 到下载页面 在下面找到 "Visual Studio 2017 生成工具" 下载 安装就可以了(安装的时候注意只需要勾选
只需要vc编译相关工具就可以了)

二.下载 php-sdk 解压

https://github.com/Microsoft/php-sdk-binary-tools
<https://github.com/Microsoft/php-sdk-binary-tools>

解压到 d:\php_sdk\ (假设我们准备使用 d:\php_sdk\ 作为编译目录)

这时 d:\php_sdk\ 下面应该有 



三.在 d:\php_sdk\ 运行phpsdk-vc15-x86.bat

在 php_sdk 目录 按住 shift 键 右键 点击 "在此处打开命令行窗口"

在命令行窗口运行 "phpsdk-vc15-x86.bat"  

注释: 如果想编译 64位版本就运行 x64,

结果如下图(phpsdk目录不太一样)



四.运行 phpsdk_buildtree phpdev 

这时候 d:\php_sdk\ 下面应该会有一个 phpdev 目录

五.下载php源码解压到 d:\php_sdk\phpdev\vc15\x86\php-src

在  d:\php_sdk\phpdev\vc15\x86\  (64位为x64) 下面创建 php-src 目录

下载php源码 解压到 php-src 目录

这时 d:\php_sdk\phpdev\vc15\x86\php-src\ 目录下面应该如下 (目录文件可能不太一样 但是这就是源码的根目录)



六.进入 php-src 目录,执行

命令行 "cd d:\php_sdk\phpdev\vc15\x86\php-src\" 进入 php-src 目录

命令行"phpsdk_deps --update --branch master" php会自动下载 需要的依赖包(以前需要手动下载php-dsp文件)

等待下载完成 (大概如下图)
Processing package zlib-1.2.11-vc15-x64.zip Processing package
libsodium-1.0.15-vc15-x64.zip Updates performed successfully. Old dependencies
backed up into 'D:\php_sdk\phpdev\vc15\x86\deps.201712260650'.
D:\php_sdk\phpdev\vc15\x86\php-src $
7.执行 "buildconf"

命令行 执行 "buildconf"

如果提示 没有文件扩展“.js”的脚本引擎

百度 "没有文件扩展“.js”的脚本引擎" 

照这个处理 https://blog.csdn.net/ctthuangcheng/article/details/16951361

重新执行 buildconf

结果如下
$ buildconf Rebuilding configure.js Now run 'configure --help'
D:\php_sdk\phpdev\vc15\x86\php-src $
8.编译php
configure --disable-all --enable-cli --enable-zlib --enable-hash
--enable-session --without-gd --with-bz2 --enable-fd-setsize=2048
--enable-sanitizer
然后执行"nmake" 开始编译

等待数分钟(或者数10分钟)后,在php-src 目录应该能够找到 Release_TS (或者 Release_NTS 或者
x64\Release_TS ) 这样的目录

如果编译正常的话 这下面会有 php.exe 文件 证明编译php文件成功.

运行编译好的 "php.exe -v"查看是否正常运行

注释:其他命令行 configure 参数
--disable-cgi 编译出 windows 版本和 php-cgi.exe --disable-zts nts 非线程安全
--enable-shmop=shared 以dll 方式编译 php shmop 扩展
2.编译judy扩展

上面php编译成功 意味着 php编译环境搭建完成,现在开始编译 judy扩展

1.下载judy源码

http://pecl.php.net/package/judy  这里是php-judy 官网 但是这个源码好久没有更新了 最高只支持php5.6

https://github.com/esminis/php_pecl_judy  这个是github 上面 有用户升级过的php-judy
测试支持php7.2

根据 php_pecl_judy 的说明按如下步骤编译

2.编译judy.lib

到https://sourceforge.net/projects/judy/ 下载 源码 

解压到任意目录 

然后 在 judy-1.0.5\src\ 中右键 shift 点击 "在此处打开命令行窗口"  

运行 "C:\Program Files (x86)\Microsoft Visual
Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars32.bat" 注意路径可能不一样

然后运行 "build"

然后会编译出一个 judy.lib

3.拷贝judy.lib文件

一.重命名 judy.lib 文件为 "libJudy.lib" 复制到 D:\php_sdk\phpdev\vc15\x86\deps\lib\ 目录下

注释:也有可能是  D:\php_sdk\phpdev\vc15\x86\deps.xxxxxxx\lib\ 文件(看看哪个lib下面有 文件
就拷贝到哪个目录)

二.复制 judy.h 到deps\include 下面(同上 目录可能 为deps.xxxx )

4.复制 phpjudy(https://github.com/esminis/php_pecl_judy)源码到 php-src\ext\judy\

在 ext\judy\ 下面应该有文件



5.在刚刚编译php的cmd窗口执行 
configure --disable-all --enable-cli --enable-zlib --enable-hash
--enable-session --without-gd --with-bz2 --with-judy=shared
--enable-fd-setsize=2048 --enable-sanitizer
 

(如果关闭了 需要重新 执行 phpsdk-vc15-x86.bat 然后进入 php-src目录 执行 "build")

 

然后执行 nmake 然后就可以在 Release_TS 目录看见 php-judy.dll了(编译成功)

注意事项:

如果出现 如果出现 "Unknown option --with-xxxx;" 请重新执行 buildconf 

buildconf  会重新根据 扩展目录 "ext" 重新生成 configure.js (也就是说 如果复制了扩展文件到 ext 目录的就需要重新 执行
buildconf )