PHP8编译lex编译不过的问题

本文基于的php-src commit为:915abeb6995bad124c325c69b8c44de65da36879

由于我经常需要去拉php-srcmaster分支代码的代码,然后时不时需要重新编译php,然后出了一个这个问题:

1
2
3
4
5
6
Zend/zend_language_scanner.l:309:15 error conflicting types for 'zend_lex_tstring'
ZEND_API int zend_lex_tstring(zval *zv, zend_lexer_ident_ref ident_ref)

In file included from Zend/zend_language_scanner.l:40:0:
php-src/Zend/zend_language_scanner.h:81:14: note: previous declaration of 'zend_lex_tstring' was here
ZEND_API int zend_lex_tstring(zval *zv, zend_lexer_ident_ref ident_ref)

这个问题是因为在php-src下面跑make clean无法清理完所有编译出来的东西(包括词法分析器编译出来的.c文件),所以,我们这里跑完make clean后需要自己手动去删除这些没删干净的东西(例如zend_language_scanner.c)。如何判断要删除哪些呢?也很简单,只要这个文件没有加入到git仓库,我们就可以删除。