转载请注明文章出处:https://itlanyan.com/solve-build-php71-extension-error-on-windows

接上篇Windows编译PHP7.2拓展,以为编译PHP7.1的拓展应该水到渠成,马到成功。哪知道编译PHP7.1拓展出现了新问题,折腾更超7.2。

第一个问题是VC15(visual studio 2017)不能编译PHP7.1的拓展,所以需要安装VC14(visual studio 2015)或其编译工具。从巨硬官网下载2015要登录,还要订阅“Visual Studio Dev Essentials”计划。看着安装程序显示需要占用9个G的硬盘空间,50G的C盘同样感到菊紧。

安装好VC14,开始按照流程编译PHP拓展,新的问题出现了:”NMAKE : fatal error U1077: ‘”‘ : return code ‘0x1′”。向上回溯编译信息,具体错误点是:

"" -h win32\ -r D:\PHP2Compile\php-sdk-binary-tools\phpdev\vc14\x64\php-7.1
.8-src\x64\Release_TS\ -x D:\PHP2Compile\php-sdk-binary-tools\phpdev\vc14\x64\php-7
.1.8-src\x64\Release_TS\ win32\build\wsyslog.mc
'-h' is not recognized as an internal or external command,
operable program or batch file.

根据-h win32字符串,在Makefile中找到具体命令,由于”MC”变化初始化为空,所以只剩命令参数无具体指令名。那么MC的值应该是什么呢?Makefile其值则为:”$(MC)”,打开PHP7.2的Makefile,发现值是:”C:\Program Files (x86)\Windows Kits\10\bin\10.0.17134.0\x64\mc.exe”。参考PHP7.2的方案将其值改成:”C:\Program Files (x86)\Windows Kits\8.1\bin\x86\mc.exe”。

继续编译,MT变量初始化错误导致类似问题。按照MC的处理方式将值改成:”C:\Program Files (x86)\Windows Kits\8.1\bin\x86\mt.exe”。

接下来编译出现”NMAKE : fatal error U1077: “rc”: return code“0x1” Stop.”。MC提示错误时上网查原因看到过,没想到我这里多灾多难,多爬出了几个坑才到别人的坑里。想着这样没完没了的处理一个个变量不是办法,肯定是哪里的配置出了点问题。联系MC和MT变量,都是因为没有找到具体exe文件导致。RC会不会也是这个问题呢?

在“C:\Program Files (x86)\Windows Kits\8.1\bin\x86”下找rc.exe,果然发现这个程序。所以很有可能是因为PATH变量未设置正确导致的。右键“我的电脑”->“属性”->“环境变量”,将“C:\Program Files (x86)\Windows Kits\8.1\bin\x86”的值加入用户PATH变量,注销重新登录。再次编译PHP7.1的程序和拓展,一气呵成,完美!

总结

除了需要安装visual studio 2015,剩下的问题都是同一个:VC14编译工具未在PATH变量中,更新环境变量即可。