下载好rar-4.0.0.tgz,进行解压~~

gunzip rar-4.0.0.tgz

得到tar,再解压~~~

tar -xvf rar-4.0.0.tar

cd到目录rar-4.0.0.tar里

cd rar-4.0.0/

用phpize确认一下已安装php版本

/usr/local/php/bin/phpize

输出

Configuring for:
PHP Api Version:         20180731
Zend Module Api No:      20180731
Zend Extension Api No:   320180731

然后进行生成编译配置

./configure --with-php-config=/usr/local/php/bin/php-config

这里要根据自己的路径。

xiuixuiux刷出一堆代码
最后,make & make install 就行,但是我这里make出错了。

显示:

/tmp/pear/download/rar-4.0.0/rararch.c:1173:18: error: ‘zend_class_entry’ {aka ‘struct _zend_class_entry’} has no member named ‘iterator_funcs’; did you mean ‘iterator_funcs_ptr’?
  rararch_ce_ptr->iterator_funcs.funcs = &rararch_it_funcs;
                  ^~~~~~~~~~~~~~
                  iterator_funcs_ptr
make: *** [Makefile:198: rararch.lo] Error 1

重点看到

/tmp/pear/download/rar-4.0.0/rararch.c:1173:18: error: ‘zend_class_entry’ {aka ‘struct _zend_class_entry’} has no member named ‘iterator_funcs’; did you mean ‘iterator_funcs_ptr’?

让我很纳闷,索性去百度了一通,果然找到了,原来是因为

这是由于新的Zend代码由之前的:
zend_class_iterator_funcs iterator_funcs;
class_container.iterator_funcs.funcs = NULL;
已经修改成:
zend_class_iterator_funcs *iterator_funcs_ptr;
class_container.iterator_funcs_ptr = NULL;

那就好办了,直接进配置文件修改一下即可~~

编辑rar-4.0.0/目录下的rararch.c文件
修改第961行 it->parent.funcs = ce->iterator_funcs.funcs;
改为:it->parent.funcs = ce->iterator_funcs_ptr;

修改1173行 rararch_ce_ptr->iterator_funcs.funcs = &rararch_it_funcs;
改为 rararch_ce_ptr->iterator_funcs_ptr = &rararch_it_funcs;

(注意别复制到空格)

修改完保存,重新编译,成功~ ~ ~ ~

参考于:zend_class_entry’ has no member named ‘iterator_funcs’