2016-12-13 14 views
2

Я попытался скомпилировать расширение PECL win32service из https://pecl.php.net/package/win32serviceКак скомпилировать PECL расширение win32service для PHP7.0 на Windows,

На странице 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):

настроить повреждают-все --enable-кли --enable-win32service = общий

Как построить это расширение или как исправить код для связи?

+1

Последняя версия win32service была выпущена (бета) в 2011 году переговоров о PHP7 началась в 2014- 2015. Кажется, что в настоящее время нет поддержки. – Dekel

ответ

1

Я получил примечание от сопровождающего, указывающего в каком-то направлении, где основная причина. Большое спасибо Ричарду.

Расширения должны быть адаптированы из PHP (5.x.x) в PHPNG (7.x.x). Внутренние изменения изменены, а макросы (например, Z_TYPE_PP) больше не указаны.

Документация https://wiki.php.net/internals/engine/objects говорит:

Тип 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: http://lxr.php.net/source/xref/PHP-5.6/Zend/zend_operators.h#491

PHP7.0: http://lxr.php.net/source/xref/PHP-7.0/Zend/zend_types.h#337