如何在Windows上为PHP7.0编译PECL扩展win32service

如何在Windows上为PHP7.0编译PECL扩展win32service,php,c,pecl,Php,C,Pecl,我试图从中编译pecl扩展win32service 在上面的pecl页面上,您正在编写PHP5.5和PHP5.6的版本。所以我试着自己编译它。由于PHP7.0在我的环境中构建良好,我收到了一些链接器错误 Creating library C:\php-sdk\phpdev\vc14\x64\php-7.0.14-src\x64\Release_TS\php_win32service.lib and object C:\php-sdk\phpdev\vc14\x64\php-7.0.14-src\

我试图从中编译pecl扩展
win32service

在上面的pecl页面上,您正在编写PHP5.5和PHP5.6的版本。所以我试着自己编译它。由于PHP7.0在我的环境中构建良好,我收到了一些链接器错误

Creating library C:\php-sdk\phpdev\vc14\x64\php-7.0.14-src\x64\Release_TS\php_win32service.lib and object C:\php-sdk\phpdev\vc14\x64\php-7.0.14-src\x64\Release_TS\php_win32service.exp
win32service.obj : error LNK2019: unresolved external symbol Z_TYPE_PP referenced in function svc_thread_proc
win32service.obj : error LNK2019: unresolved external symbol Z_STRVAL_PP referenced in function svc_thread_proc
win32service.obj : error LNK2019: unresolved external symbol Z_STRLEN_PP referenced in function svc_thread_proc
win32service.obj : error LNK2019: unresolved external symbol Z_LVAL_PP referenced in function svc_thread_proc
C:\php-sdk\phpdev\vc14\x64\php-7.0.14-src\x64\Release_TS\php_win32service.dll : fatal error LNK1120: 4 unresolved externals
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64\link.exe"' : return code '0x460'
Stop.
使用的配置(Windows 7、x64、TS、VC14、PHP7.0.14):

配置--disable all--enable cli--enable-win32service=shared


如何构建该扩展或如何修复代码以使链接正常?

我从维护人员那里收到了一条说明,指出了根本原因所在。非常感谢Richard

扩展必须从PHP(5.x.x)修改为PHPNG(7.x.x)。 内部结构已更改,宏(如Z_TYPE_PP)不再存在

文件说:

zval的类型可以使用Z_type()或Z_type_p()宏读取,类型标志使用Z_type_flags()或Z_type_flags_p(),类型和标志的组合–Z_type_INFO()或Z_type_INFO_p()。PHPNG不适用于指向zval的指针的指针,也不再提供带有_PP()后缀的宏(如Z_TYPE_PP)

因此,这意味着扩展的代码必须进行某种重构/重写,因为宏已经消失,正如您在PHP代码本身中看到的那样:

PHP5.6:

PHP7.0:

更新: 自从我提出这个问题以来,在这方面已经做了很多工作。已经有几个工作实例,甚至dll被上传到pecl页面:

我正在为php-7.0和php-7.1构建php\u win32service:

更新: macintoshplus正在更新中的扩展 他需要帮助才能成为包裹的保管人:

win32service的最新版本于2011年发布(测试版)。关于PHP7的讨论始于2014-2015年。目前似乎没有人支持这一点。