I am getting,
Arduino/libraries/ESP8266WiFi/src/BearSSLHelpers.h:148:34: error: 'virtual const unsigned char* BearSSL::HashSHA256::oid()' marked override, but does not override
virtual const unsigned char *oid() override;
when I issued the verify command on the Arduino 1.8.10 IDE under Ubuntu 18.04. I didn't want to post too many details since I'm not sure what the best forum is for this question.
This code worked last year under Arduino 1.8.3, but I re-installed the IDE and there have been a lot of changes to the libraries. I am using the NodeMCU V3 LoLin, so I selected Board: NodeMCU 1.0 (ESP-12E Module) which I think is the same one I was using before when it worked.
I'm an intermediate/advanced C++ programmer, but the IDE is not providing me enough information to determine the issue. The base class definition should be overridden if it's using the one I inspected. I found via Google that others have rolled back to older versions of the board library, but I am not familiar enough with Arduino to do that and I'd rather fix the new code.
I just tried v1.8.9 and it yieleded the same errors. Before that, I tried the system installer default for Ubuntu 18.04 which was v1.8.5, but that one didn't have my board, NodeMCU 1.0 (ESP-12E Module) and it just gave me errors about not finding the WiFiClientSecureBearSSL.h file which is the library, i.e., ~/Arduino/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.h.
I think the compiler should work. The command line with version reference is,
2.5.0-3-20ed2b9/bin/xtensa-lx106-elf-g++
It references,
esp8266/2.5.2/tools/sdk/include
and other includes, as I think should.
I inspected the includes and saw there's an Updater.h in 2.5.2/cores/esp8266, but it's identical to the one I thought was being used from the Arduino library, except for line #24 which is #define U_SPIFFS 100 in the SDK v #define U_FS 100 in the library. That would not affect the override being flagged. I thought I was looking for definition which would change the C++ signature for oid(), but I can't find it.
However, this tells me I shouldn't have an Updater.h or .cpp in my library because there's already one in the core.
I deleted Updater* from my library, exited the IDE, restarted it and got the same error as before, confirming I didn't need the Updater in my library; however, I noticed it still showed it built the Updater.o from my library's .cpp which means the cache is corrupt or I have to flush it!
Found it! I deleted the cache and staging directories under the Arduino ~/.arduino15 directory and got the same error only this time I compared the files,
~/ws/Arduino/cores/esp8266/Updater.h
packages/esp8266/hardware/esp8266/2.5.2/cores/esp8266/Updater.h
because the packages file is missing the definition,
virtual const unsigned char *oid() = 0;
which explains why it's not overridden!
So, I now deleted the keyword from Arduino/libraries/ESP8266WiFi/src/BearSSLHelpers.h and no longer get that error!
However, I'm getting a whole lot of others which is fine since I understand what's going on now!
I'm going to have to do a lot more research before proceeding because I don't like working in the dark. Obviously a lot has changed since I last use my code, so I need to get up to speed on all the changes to the board libraries because I don't really want to use really old legacy libraries. I'd rather use "updated" legacy libraries.
I'm posting this in case someone else attempted to resurrect old code only to corrupt the libraries. My advice to anyone who wants to do that is, make sure you have a backup of your old code and libraries that worked, then delete all the Arduino IDE, including the ".arduino15" directory before installing the latest stable version of the IDE and libraries. It could save you hours if you avoid chasing ghosts.