ESP8266 NodeMCU编译BearSSL相关报错求助(首次使用ESP/Arduino)
求助解答:ESP8266 Arduino编译BearSSL相关错误
Hey 你好!第一次接触ESP+Arduino就碰到这种编译错误确实闹心,我来帮你分析下问题所在和可能的解决办法:
你遇到的编译错误详情
In file included from C:\Users\Muell\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\libraries\ESP8266WiFi\src/WiFiClientSecure.h:41:0, from C:\Users\Muell\AppData\Local\Temp\Temp5_Hal-Finney-Price-Checker-master.zip\Hal-Finney-Price-Checker-master\main\main.ino:7: C:\Users\Muell\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:262:36: error: expected ')' before '*' token WiFiClientSecure(ClientContext *client, const X509List *chain, unsigned cert_issuer_key_type, C:\Users\Muell\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:264:35: error: expected ')' before '*' token WiFiClientSecure(ClientContext* client, const X509List *chain, const PrivateKey *sk, C:\Users\Muell\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:38:5: error: 'BearSSL::WiFiClientSecure::~WiFiClientSecure()' marked override, but does not override ~WiFiClientSecure() override; C:\Users\Muell\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:43:9: error: 'int BearSSL::WiFiClientSecure::connect(const String&, uint16_t)' marked override, but does not override int connect(const String& host, uint16_t port) override; C:\Users\Muell\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:48:12: error: 'size_t BearSSL::WiFiClientSecure::write_P(const char*, size_t)' marked override, but does not override size_t write_P(PGM_P buf, size_t size) override; C:\Users\Muell\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\libraries\ESP8266WiFi\src/WiFiClientSecureBearSSL.h:60:12: error: 'size_t BearSSL::WiFiClientSecure::peekBytes(uint8_t*, size_t)' marked override, but does not override size_t peekBytes(uint8_t *buffer, size_t length) override; exit status 1 Error compiling for board NodeMCU 1.0 (ESP-12E Module).
针对性解决方案
从错误信息来看,主要是BearSSL相关头文件里的函数重载不匹配、语法问题,大概率是核心版本过旧或者缓存/冲突导致的,试试下面几个步骤:
升级ESP8266 Arduino核心版本
你当前用的是2.7.2版本,这个版本已经很老了,BearSSL的实现当时还在频繁调整,存在不少兼容性问题。打开Arduino IDE的「板管理器」,搜索「ESP8266」,把它更新到最新的稳定版(现在是3.x系列),新版本已经修复了很多BearSSL相关的头文件问题。清理Arduino的临时文件和缓存
有时候临时编译文件损坏会导致奇怪的错误,你可以删除以下路径的内容:C:\Users\Muell\AppData\Local\Temp里的Arduino相关临时文件夹/文件C:\Users\Muell\AppData\Local\Arduino15\cache整个缓存文件夹
删完重启IDE再尝试编译。
排查库冲突问题
如果你的项目里还用到了其他和SSL、WiFi相关的第三方库,可能会和ESP8266自带的WiFiClientSecure发生冲突。可以先暂时移除项目里非必需的库,看看编译是否能正常通过。检查代码中WiFiClientSecure的用法
如果你的代码直接调用了BearSSL专属的构造函数或方法,这些接口在不同核心版本里可能已经变更。可以参考新版ESP8266 Arduino的官方文档,调整代码里的WiFiClientSecure相关写法。
我知道你已经查过一些相关讨论帖,但这些步骤应该能直击你当前问题的根源,试试看能不能解决!
内容的提问来源于stack exchange,提问作者MonolithDark




