mobizt/ESP-Signer

Compile Errors in FirebaseJson.h

oliverparis opened this issue · 6 comments

I am getting the following compiler errors when trying to compile the Basic.ino example:

Compiling .pio\build\esp32dev\lib06f\ESP Signer\bearssl\i31_decred.c.o
In file included from .pio/libdeps/esp32dev/ESP Signer/src/SignerCommon.h:39:0,
                 from .pio/libdeps/esp32dev/ESP Signer/src/SignerUtils.h:37,
                 from .pio/libdeps/esp32dev/ESP Signer/src/ESPSigner.h:41,
                 from src/main.cpp:8:
.pio/libdeps/esp32dev/ESP Signer/src/./json/FirebaseJson.h:2223:13: error: expected ';' at end of member declaration
     Stream *toStream(File *file)
             ^
.pio/libdeps/esp32dev/ESP Signer/src/./json/FirebaseJson.h:2223:22: error: 'Stream* FirebaseJsonBase::toStream' conflicts with a previous declaration
     Stream *toStream(File *file)
                      ^
.pio/libdeps/esp32dev/ESP Signer/src/./json/FirebaseJson.h:2212:13: note: previous declaration 'Stream* FirebaseJsonBase::toStream(HardwareSerial*)'
     Stream *toStream(HardwareSerial *ser)
             ^
.pio/libdeps/esp32dev/ESP Signer/src/./json/FirebaseJson.h:2223:27: error: expected ')' before '*' token
     Stream *toStream(File *file)
                           ^
.pio/libdeps/esp32dev/ESP Signer/src/./json/FirebaseJson.h: In member function 'bool FirebaseJsonArray::readFrom(fs::File&)':
.pio/libdeps/esp32dev/ESP Signer/src/./json/FirebaseJson.h:2442:73: error: no matching function for call to 'FirebaseJsonArray::toStream(fs::File*)'
     bool readFrom(FILE_SYSTEM &file) { return mReadStream(toStream(&file), -1); }
                                                                         ^
.pio/libdeps/esp32dev/ESP Signer/src/./json/FirebaseJson.h:2212:13: note: candidate: Stream* FirebaseJsonBase::toStream(HardwareSerial*)
     Stream *toStream(HardwareSerial *ser)
             ^
.pio/libdeps/esp32dev/ESP Signer/src/./json/FirebaseJson.h:2212:13: note:   no known conversion for argument 1 from 'fs::File*' to 'HardwareSerial*'
.pio/libdeps/esp32dev/ESP Signer/src/./json/FirebaseJson.h: In member function 'bool FirebaseJson::readFrom(fs::File&)':
.pio/libdeps/esp32dev/ESP Signer/src/./json/FirebaseJson.h:2914:73: error: no matching function for call to 'FirebaseJson::toStream(fs::File*)'
     bool readFrom(FILE_SYSTEM &file) { return mReadStream(toStream(&file), -1); }
                                                                         ^
.pio/libdeps/esp32dev/ESP Signer/src/./json/FirebaseJson.h:2212:13: note: candidate: Stream* FirebaseJsonBase::toStream(HardwareSerial*)
     Stream *toStream(HardwareSerial *ser)
             ^
.pio/libdeps/esp32dev/ESP Signer/src/./json/FirebaseJson.h:2212:13: note:   no known conversion for argument 1 from 'fs::File*' to 'HardwareSerial*'
Compiling .pio\build\esp32dev\lib06f\ESP Signer\bearssl\i31_encode.c.o
Compiling .pio\build\esp32dev\lib06f\ESP Signer\bearssl\i31_fmont.c.o
Compiling .pio\build\esp32dev\lib06f\ESP Signer\bearssl\i31_iszero.c.o
Compiling .pio\build\esp32dev\lib06f\ESP Signer\bearssl\i31_moddiv.c.o
*** [.pio\build\esp32dev\src\main.cpp.o] Error 1

Please can you help me understand what I'm doing wrong?

I've tried updating the FirebaseJson files with the latest from that GitHub project, but that just resulted in many more (different) compile errors, so I'm fundamentally missing something.

You can update the library to v1.1.3 which update the FirebaseJson internally.

Thanks so much! Strangely, I'm still getting a compile error relating to 'File' not declared.

Compiling .pio\build\esp32dev\src\main.cpp.o
In file included from .pio/libdeps/esp32dev/ESP Signer/src/SignerConst.h:38:0,
                 from .pio/libdeps/esp32dev/ESP Signer/src/SignerUtils.h:36,
                 from .pio/libdeps/esp32dev/ESP Signer/src/ESPSigner.h:38,
                 from src/main.cpp:8:
.pio/libdeps/esp32dev/ESP Signer/src/./json/FirebaseJson.h:744:88: error: 'File' was not declared in this scope
     auto toStringHandler(T &out, bool prettify) -> typename MB_ENABLE_IF<MB_IS_SAME<T, File>::value, bool>::type
                                                                                        ^
.pio/libdeps/esp32dev/ESP Signer/src/./json/FirebaseJson.h:744:88: note: suggested alternative:
In file included from .pio/libdeps/esp32dev/TFT_eSPI/Processors/TFT_eSPI_ESP32.h:137:0,
                 from .pio/libdeps/esp32dev/TFT_eSPI/TFT_eSPI.h:65,
                 from src/main.cpp:4:
C:/Users/Oliver/.platformio/packages/framework-arduinoespressif32/libraries/FS/src/FS.h:47:7: note:   'fs::File'
 class File : public Stream
       ^
In file included from .pio/libdeps/esp32dev/ESP Signer/src/SignerConst.h:38:0,
                 from .pio/libdeps/esp32dev/ESP Signer/src/SignerUtils.h:36,
                 from .pio/libdeps/esp32dev/ESP Signer/src/ESPSigner.h:38,
                 from src/main.cpp:8:
.pio/libdeps/esp32dev/ESP Signer/src/./json/FirebaseJson.h:744:92: error: template argument 2 is invalid
     auto toStringHandler(T &out, bool prettify) -> typename MB_ENABLE_IF<MB_IS_SAME<T, File>::value, bool>::type
                                                                                            ^
.pio/libdeps/esp32dev/ESP Signer/src/./json/FirebaseJson.h:744:106: error: template argument 1 is invalid
     auto toStringHandler(T &out, bool prettify) -> typename MB_ENABLE_IF<MB_IS_SAME<T, File>::value, bool>::type
                                                                                                          ^

Any ideas?

You should update ESP32 Arduino Core SDK (via Boards Manager in Arduino IDE).

Edit: ESP32

I have moved my project over to Arduino IDE and updated everything to the latest board version in board manager, and still getting the same compiler errors unfortunately.

In file included from C:\Users\Oliver\Documents\Arduino\libraries\ESP-Signer-main\src/SignerConst.h:38,
                 from C:\Users\Oliver\Documents\Arduino\libraries\ESP-Signer-main\src/SignerUtils.h:36,
                 from C:\Users\Oliver\Documents\Arduino\libraries\ESP-Signer-main\src/ESPSigner.h:38,
                 from C:\Users\Oliver\Documents\Arduino\sketch_mar13a\sketch_mar13a.ino:8:
c:\users\oliver\documents\arduino\libraries\esp-signer-main\src\json\firebasejson.h:744:88: error: 'File' was not declared in this scope
     auto toStringHandler(T &out, bool prettify) -> typename MB_ENABLE_IF<MB_IS_SAME<T, File>::value, bool>::type
                                                                                        ^~~~
c:\users\oliver\documents\arduino\libraries\esp-signer-main\src\json\firebasejson.h:744:88: note: suggested alternative:
In file included from C:\Users\Oliver\Documents\Arduino\libraries\TFT_eSPI/Processors/TFT_eSPI_ESP32.h:137,
                 from C:\Users\Oliver\Documents\Arduino\libraries\TFT_eSPI/TFT_eSPI.h:65,
                 from C:\Users\Oliver\Documents\Arduino\sketch_mar13a\sketch_mar13a.ino:4:
C:\Users\Oliver\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.2\libraries\FS\src/FS.h:47:7: note:   'fs::File'
 class File : public Stream
       ^~~~
In file included from C:\Users\Oliver\Documents\Arduino\libraries\ESP-Signer-main\src/SignerConst.h:38,
                 from C:\Users\Oliver\Documents\Arduino\libraries\ESP-Signer-main\src/SignerUtils.h:36,
                 from C:\Users\Oliver\Documents\Arduino\libraries\ESP-Signer-main\src/ESPSigner.h:38,
                 from C:\Users\Oliver\Documents\Arduino\sketch_mar13a\sketch_mar13a.ino:8:
c:\users\oliver\documents\arduino\libraries\esp-signer-main\src\json\firebasejson.h:744:92: error: template argument 2 is invalid
     auto toStringHandler(T &out, bool prettify) -> typename MB_ENABLE_IF<MB_IS_SAME<T, File>::value, bool>::type
                                                                                            ^
c:\users\oliver\documents\arduino\libraries\esp-signer-main\src\json\firebasejson.h:744:106: error: template argument 1 is invalid
     auto toStringHandler(T &out, bool prettify) -> typename MB_ENABLE_IF<MB_IS_SAME<T, File>::value, bool>::type
                                                                                                          ^
Multiple libraries were found for "SD.h"
 Used: C:\Users\Oliver\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.2\libraries\SD
 Not used: C:\Program Files (x86)\Arduino\libraries\SD
Multiple libraries were found for "WiFi.h"
 Used: C:\Users\Oliver\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.2\libraries\WiFi
 Not used: C:\Program Files (x86)\Arduino\libraries\WiFi
exit status 1
Error compiling for board ESP32 Dev Module.

This is the same errors I'm getting in PlatformIO, either using the latest released ESP32 platform or using the latest Beta.

I really appreciate your help on this.

Before I post I tested it already in PlatformIO and Arduino IDE with the latest core sdk.

The error is due to your ESP32 Arduino core SDK was not install correctly or incomplete installation.

The File class is the Stream derived class which included in the core library here.

You should reinstall the IDE and install the ESP32 core sdk again.

All my libraries develop using PlatformIO IDE.