Hallo,
ich möchte die von Fips angebotenen Webseiten Sketche auf einen XIAO ESP32S3 umziehen. Auf einem Arduino Nano ESP32 mit Arduino Core Package kompiliert und funktioniert alles. Ich verwende die Arduino IDE 2.3.4.
Mit dem aktuellen Espressif Core Package 3.1.1, egal ob für Arduino Nano ESP32 oder XIAO ESP32S3 verwendet, kompiliert es nicht.
Nehme ich den alten Espressif Core Package 2.0.17, der praktisch gleich dem Arduino ist, kompiliert es.
Für den XIAO ESP32S3 benötige ich sowieso den Espressif Core, ich möchte den aktuellen verwenden.
Ich erhalte immer einen "multiple definition of `RequestHandler ..." Error.
Ich konnte den Fehler auf 2 .ino Tabs runterbrechen.
Besteht aus dem Webserver Bsp. HttpBasicAuth und dem LittleFS Tab von Fips.
Linker Errors
C:/Users/z/AppData/Local/Arduino15/packages/esp32/tools/esp-x32/2405/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: C:\Users\z\AppData\Local\arduino\sketches\57786FAB64F608E24496B673D0F07C1B\libraries\WebServer\WebServer.cpp.o: in function `RequestHandler::addMiddleware(Middleware*)':
C:\Users\z\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WebServer\src\detail/RequestHandlersImpl.h:13: multiple definition of `RequestHandler::addMiddleware(Middleware*)'; C:\Users\z\AppData\Local\arduino\sketches\57786FAB64F608E24496B673D0F07C1B\sketch\HttpBasicAuth_001.ino.cpp.o:C:\Users\z\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WebServer\src/detail/RequestHandlersImpl.h:13: first defined here
C:/Users/z/AppData/Local/Arduino15/packages/esp32/tools/esp-x32/2405/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: C:\Users\z\AppData\Local\arduino\sketches\57786FAB64F608E24496B673D0F07C1B\libraries\WebServer\WebServer.cpp.o: in function `RequestHandler::removeMiddleware(Middleware*)':
C:\Users\z\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WebServer\src\detail/RequestHandlersImpl.h:29: multiple definition of `RequestHandler::removeMiddleware(Middleware*)'; C:\Users\z\AppData\Local\arduino\sketches\57786FAB64F608E24496B673D0F07C1B\sketch\HttpBasicAuth_001.ino.cpp.o:C:\Users\z\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WebServer\src/detail/RequestHandlersImpl.h:29: first defined here
C:/Users/z/AppData/Local/Arduino15/packages/esp32/tools/esp-x32/2405/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: C:\Users\z\AppData\Local\arduino\sketches\57786FAB64F608E24496B673D0F07C1B\libraries\WebServer\WebServer.cpp.o: in function `RequestHandler::process(WebServer&, http_method, String)':
C:\Users\z\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WebServer\src\detail/RequestHandlersImpl.h:36: multiple definition of `RequestHandler::process(WebServer&, http_method, String)'; C:\Users\z\AppData\Local\arduino\sketches\57786FAB64F608E24496B673D0F07C1B\sketch\HttpBasicAuth_001.ino.cpp.o:C:\Users\z\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WebServer\src/detail/RequestHandlersImpl.h:36: first defined here
C:/Users/z/AppData/Local/Arduino15/packages/esp32/tools/esp-x32/2405/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: C:\Users\z\AppData\Local\arduino\sketches\57786FAB64F608E24496B673D0F07C1B\libraries\WebServer\WebServer.cpp.o: in function `RequestHandler::addMiddleware(std::function<bool (WebServer&, std::function<bool ()>)>)':
C:\Users\z\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WebServer\src\detail/RequestHandlersImpl.h:21: multiple definition of `RequestHandler::addMiddleware(std::function<bool (WebServer&, std::function<bool ()>)>)'; C:\Users\z\AppData\Local\arduino\sketches\57786FAB64F608E24496B673D0F07C1B\sketch\HttpBasicAuth_001.ino.cpp.o:C:\Users\z\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WebServer\src/detail/RequestHandlersImpl.h:21: first defined here
collect2.exe: error: ld returned 1 exit status
Bibliothek WiFi in Version 3.1.1 im Ordner: C:\Users\z\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WiFi wird verwendet
Bibliothek Networking in Version 3.1.1 im Ordner: C:\Users\z\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\Network wird verwendet
Bibliothek ESPmDNS in Version 3.1.1 im Ordner: C:\Users\z\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\ESPmDNS wird verwendet
Bibliothek ArduinoOTA in Version 3.1.1 im Ordner: C:\Users\z\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\ArduinoOTA wird verwendet
Bibliothek Update in Version 3.1.1 im Ordner: C:\Users\z\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\Update wird verwendet
Bibliothek WebServer in Version 3.1.1 im Ordner: C:\Users\z\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WebServer wird verwendet
Bibliothek FS in Version 3.1.1 im Ordner: C:\Users\z\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\FS wird verwendet
Bibliothek LittleFS in Version 3.1.1 im Ordner: C:\Users\z\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\LittleFS wird verwendet
Bibliothek Streaming in Version 6.2.0 im Ordner: G:\Arduino IDE v2.3.4\portable\sketchbook\libraries\Streaming wird verwendet
exit status 1
Die Webserver Lib unterscheidet sich zwischen Arduino Core 2.0.18 und Espressif Core 3.1.1.
Soweit ist mir das schon klar das es Probleme geben könnte.
Ich verstehe nur nicht warum der Compiler multiple Definitionen anmeckert.
Webserver.h
in class Webserver
WebServer &addMiddleware(Middleware *middleware);
WebServer &addMiddleware(Middleware::Function fn);
WebServer &removeMiddleware(Middleware *middleware);
RequestHandlersImpl.h
RequestHandler &RequestHandler::addMiddleware(Middleware *middleware) {
if (!_chain) {
_chain = new MiddlewareChain();
}
_chain->addMiddleware(middleware);
return *this;
}
RequestHandler &RequestHandler::addMiddleware(Middleware::Function fn) {
if (!_chain) {
_chain = new MiddlewareChain();
}
_chain->addMiddleware(fn);
return *this;
}
RequestHandler &RequestHandler::removeMiddleware(Middleware *middleware) {
if (_chain) {
_chain->removeMiddleware(middleware);
}
return *this;
}
bool RequestHandler::process(WebServer &server, HTTPMethod requestMethod, String requestUri) {
if (_chain) {
return _chain->runChain(server, [this, &server, &requestMethod, &requestUri]() {
return handle(server, requestMethod, requestUri);
});
} else {
return handle(server, requestMethod, requestUri);
}
}
Ich hätte gern gewusst was daran dem Compiler stört?
Für mich sind das unterschiedliche Signaturen.
Mein Sketchpaket. HttpBasicAuth_001.zip (8,2 KB)