FabGL库编译报错求助:ESP32环境下示例代码编译失败
解决FabGL 1.0与ESP32 Arduino Core 3.0.2编译不兼容问题
核心原因
FabGL 1.0是针对ESP32 Arduino Core 2.x系列开发的,而你安装的ESP32 3.0.2属于3.x核心版本,该版本对底层API做了大量变更(比如移除ets_delay_us、重命名GPIO矩阵函数、调整类型定义),直接导致FabGL旧版代码无法兼容编译。这和Arduino IDE 2.3.2版本无关,核心问题是ESP32核心版本不匹配。
解决思路与步骤
方案1:降级ESP32 Arduino Core到2.x稳定版(推荐)
这是最省心的解决方式,无需修改FabGL代码:
- 打开Arduino IDE,进入「文件」→「首选项」,确认「附加开发板管理器网址」中包含Espressif的官方地址(一般是
https://dl.espressif.com/dl/package_esp32_index.json)。 - 打开「工具」→「开发板」→「开发板管理器」,搜索「ESP32」。
- 找到已安装的「esp32 by Espressif Systems 3.0.2」,点击「卸载」。
- 选择安装2.x系列的稳定版本(比如2.0.11,经测试和FabGL 1.0兼容性良好)。
- 安装完成后,重新选择「ESP32 Dev Module」,保持分区方案为「Huge APP」,再次编译示例即可。
方案2:手动修改FabGL代码适配ESP32 3.0.2(不推荐,适合不想降级的场景)
需要针对每个错误逐一修改库文件,涉及多处调整:
'ets_delay_us' was not declared in this scope错误:在FabGL库中出现该错误的文件里,将ets_delay_us替换为esp_rom_delay_us(ESP32 3.x核心用这个函数替代了旧的ets_delay_us)。gpio_matrix_in/gpio_matrix_out未定义错误:这两个函数在3.x核心中被重命名,可替换为esp_rom_gpio_matrix_in和esp_rom_gpio_matrix_out(调用方式和旧函数一致)。uint32_t*转size_t*类型转换错误:在报错的代码行中添加显式强制转换,比如将func((uint32_t*) ptr)修改为func((size_t*) ptr),具体需根据上下文调整类型方向。
方案3:检查FabGL库是否有更新版本
打开Arduino IDE的库管理器,搜索「FabGL」,查看是否有高于1.0的版本。如果存在新版本,尝试更新到最新版——部分新版本可能已经适配了ESP32 3.x核心,可直接解决编译问题。
内容的提问来源于stack exchange,提问作者Roxo
相关产品推荐
相关产品推荐

