[ https://issues.apache.org/jira/browse/THRIFT-5455?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Christopher Tubbs resolved THRIFT-5455. --------------------------------------- Resolution: Works for Me > Can not build thrift protocol for PHP 8 > --------------------------------------- > > Key: THRIFT-5455 > URL: https://issues.apache.org/jira/browse/THRIFT-5455 > Project: Thrift > Issue Type: Bug > Components: PHP - Compiler > Reporter: Vladislav Kalmykov > Priority: Major > > There is a problem that thrift protocol extension does not compile for PHP 8. > For example, I am using the following Dockerfile to reproduce the error: > {code:java} > FROM php:8-fpm > RUN apt update \ > && apt install -y wget \ > openssl \ > unzip \ > libtool > RUN wget -O /tmp/thrift.zip > https://github.com/apache/thrift/archive/refs/tags/v0.14.2.zip \ > && mkdir /tmp/thrift \ > && unzip -q /tmp/thrift.zip -d /tmp/thrift/ \ > && cd /tmp/thrift/thrift-0.14.2/ \ > && ./bootstrap.sh \ > && cd /tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/ \ > && ./configure \ > && make \ > && cp > /tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/modules/thrift_protocol.so > /usr/local/lib/php/extensions/no-debug-non-zts-20200930/thrift_protocol.so \ > && echo extension=thrift_protocol.so > > /usr/local/etc/php/conf.d/thrift_protocol.ini > CMD ["php-fpm"] > {code} > And then I get the following log with errors "cannot convert zval to > zend_object": > > {code:java} > #6 12.42 /bin/bash > /tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/libtool > --mode=compile g++ -I. > -I/tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol > -I/tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/include > -I/tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/main > -I/tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol > -I/usr/local/include/php -I/usr/local/include/php/main > -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend > -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib > -DHAVE_CONFIG_H -g -O2 -std=c++11 -c > /tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/php_thrift_protocol.cpp > -o php_thrift_protocol.lo > #6 12.47 mkdir .libs > #6 12.47 g++ -I. -I/tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol > -I/tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/include > -I/tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/main > -I/tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol > -I/usr/local/include/php -I/usr/local/include/php/main > -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend > -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib > -DHAVE_CONFIG_H -g -O2 -std=c++11 -c > /tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/php_thrift_protocol.cpp > -fPIC -DPIC -o .libs/php_thrift_protocol.o > #6 12.64 > /tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/php_thrift_protocol.cpp: > In function 'void createObject(const char*, zval*, int, zval*, zval*)': > #6 12.64 > /tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/php_thrift_protocol.cpp:417:20: > error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka > '_zend_object*'} > #6 12.64 zend_call_method(return_value, ce, &constructor, nullptr, 0, > &ctor_rv, nargs, arg1, arg2); > #6 12.64 ^~~~~~~~~~~~ > #6 12.64 In file included from > /tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/php_thrift_protocol.cpp:24: > #6 12.64 /usr/local/include/php/Zend/zend_interfaces.h:41:46: note: > initializing argument 1 of 'zval* zend_call_method(zend_object*, > zend_class_entry*, zend_function**, const char*, size_t, zval*, uint32_t, > zval*, zval*)' > #6 12.64 ZEND_API zval* zend_call_method(zend_object *object, > zend_class_entry *obj_ce, zend_function **fn_proxy, const char > *function_name, size_t function_name_len, zval *retval, uint32_t param_count, > zval* arg1, zval* arg2); > #6 12.64 ~~~~~~~~~~~~~^~~~~~ > #6 12.65 > /tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/php_thrift_protocol.cpp: > In function 'void validate_thrift_object(zval*)': > #6 12.65 > /tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/php_thrift_protocol.cpp:931:65: > error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka > '_zend_object*'} > #6 12.65 zval* prop = zend_read_property(object_class_entry, > object, varname, strlen(varname), false, &rv); > #6 12.65 > ^~~~~~ > #6 12.65 In file included from /usr/local/include/php/main/php.h:35, > #6 12.65 from > /tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/php_thrift_protocol.cpp:23: > #6 12.65 /usr/local/include/php/Zend/zend_API.h:407:73: note: initializing > argument 2 of 'zval* zend_read_property(zend_class_entry*, zend_object*, > const char*, size_t, zend_bool, zval*)' > #6 12.65 ZEND_API zval *zend_read_property(zend_class_entry *scope, > zend_object *object, const char *name, size_t name_length, zend_bool silent, > zval *rv); > #6 12.65 > ~~~~~~~~~~~~~^~~~~~ > #6 12.65 > /tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/php_thrift_protocol.cpp: > In function 'void binary_deserialize_spec(zval*, PHPInputTransport&, > HashTable*)': > #6 12.65 > /tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/php_thrift_protocol.cpp:972:34: > error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka > '_zend_object*'} > #6 12.65 zend_update_property(ce, zthis, varname, strlen(varname), > &rv); > #6 12.65 ^~~~~ > #6 12.65 In file included from /usr/local/include/php/main/php.h:35, > #6 12.65 from > /tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/php_thrift_protocol.cpp:23: > #6 12.65 /usr/local/include/php/Zend/zend_API.h:387:74: note: initializing > argument 2 of 'void zend_update_property(zend_class_entry*, zend_object*, > const char*, size_t, zval*)' > #6 12.65 ZEND_API void zend_update_property(zend_class_entry *scope, > zend_object *object, const char *name, size_t name_length, zval *value); > #6 12.65 > ~~~~~~~~~~~~~^~~~~~ > #6 12.65 > /tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/php_thrift_protocol.cpp: > In function 'void binary_serialize_spec(zval*, PHPOutputTransport&, > HashTable*)': > #6 12.65 > /tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/php_thrift_protocol.cpp:1013:55: > error: cannot convert 'zval*' {aka '_zval_struct*'} to 'zend_object*' {aka > '_zend_object*'} > #6 12.65 zval* prop = zend_read_property(Z_OBJCE_P(zthis), zthis, > varname, strlen(varname), false, &rv); > #6 12.65 ^~~~~ > #6 12.65 In file included from /usr/local/include/php/main/php.h:35, > #6 12.65 from > /tmp/thrift/thrift-0.14.2/lib/php/src/ext/thrift_protocol/php_thrift_protocol.cpp:23: > #6 12.65 /usr/local/include/php/Zend/zend_API.h:407:73: note: initializing > argument 2 of 'zval* zend_read_property(zend_class_entry*, zend_object*, > const char*, size_t, zend_bool, zval*)' > #6 12.65 ZEND_API zval *zend_read_property(zend_class_entry *scope, > zend_object *object, const char *name, size_t name_length, zend_bool silent, > zval *rv); > #6 12.65 > ~~~~~~~~~~~~~^~~~~~ > #6 12.67 make: *** [Makefile:209: php_thrift_protocol.lo] Error 1 > {code} > > May be I need to install something? > For PHP 7.4 everything goes well. -- This message was sent by Atlassian Jira (v8.20.7#820007)