月下博客

解决Windows上编译PHP7.1拓展的错误

转载请注明文章出处:https://tlanyan.me/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变量中,更新环境变量即可。