bison版本问题导致编译报错:'parse.error' is not used
‘parse.error’ 问题定位和修正
由于工作需要编译QGIS3.10源码,使用原3.4版本的配置编译时出现: ‘parse.error’ is not used 报错。通过调查后确认是bison/flex版本偏低,更新bison/flex版本后修正此问题。
问题发现
在用VS2017编译QGIS3.10代码时,qgis_core模块报错:
error: %define variable ‘parse.error’ is not used ,如下图:
通过查看qgis_core.vcxproj文件,确定是在用bison生成代码时报错,如下图:
问题调查与定位
此版本QGIS源码同事已经编译完成,通过与同事交流和对比qgis3.4与3.10,两个版本代码,发现报错处代码发生了变化,应该是版本升级导致了兼容性问题
bison版本对比
更新bison/flex版本
更新了bison和flex版本后,代码可以正常编译.
为便于后来人,现将3.3.2版本bison及对应flex上传,供下载更新
链接: biosn3.3.2_flex2.6.
问题修正
更新bison版本后 qgis_core编译通过,其它模块后续也编译完成!
一些参考文章
对于bison和flex介绍,大家可以参阅以下链接
GNU bison
flex 词法分析器生成工具
Bison介绍