ct-Open-Source / Basecamp

An Arduino library to ease the use of the ESP32 in IoT projects
GNU General Public License v3.0
254 stars 48 forks source link

multiple definition of `JSON_MIMETYPE' #63

Closed dnlGrande closed 6 years ago

dnlGrande commented 6 years ago

Hi zusammen, zuerst vielen Dank für das coole und (wenn es denn läuft :-)) nützliche Projekt.

Leider bekomme ich es nicht gelinkt. Bei mir werden - sowohl in der Arduino IDE als auch bei PlatformIO - folgende Fehlermeldungen angezeigt. Ich habe sowohl das "doorsensor" Beispielprojekt als auch das "Minimal-Projekt" für die Einbindung von Basecamp versucht.

\arduino_build_991465\libraries\Basecamp\Basecamp.cpp.o:(.data.JSON_MIMETYPE+0x0): multiple definition of `JSON_MIMETYPE'

\arduino_build_991465\sketch\sketch_aug02b.ino.cpp.o:(.data.JSON_MIMETYPE+0x0): first defined here

\arduino_build_991465\libraries\Basecamp\WebServer.cpp.o:(.data.JSON_MIMETYPE+0x0): multiple definition of `JSON_MIMETYPE'

\arduino_build_991465\sketch\sketch_aug02b.ino.cpp.o:(.data.JSON_MIMETYPE+0x0): first defined here

\arduino_build_991465\libraries\Basecamp\WifiControl.cpp.o:(.data.JSON_MIMETYPE+0x0): multiple definition of `JSON_MIMETYPE'

\arduino_build_991465\sketch\sketch_aug02b.ino.cpp.o:(.data.JSON_MIMETYPE+0x0): first defined here

collect2.exe: error: ld returned 1 exit status

Ich habe auch schon mehrere unterschiedliche Versionen der abhängigen Libs verwendet.

Alle Libs sowohl per zip-Import importiert, als auch direkt über die Arduino bzw. PlatfomIO LibManager. Alles ohne erfolgt.

Für Hilfe oder einen Tipp wäre ich sehr dankbar. Viele Grüße.

EinfachArne commented 6 years ago

Hi, über genau das Problem bin ich gestern auch gestolpert, als ich mir neue Versionen der abhängigen Libraries gezogen habe. Es scheint an ESPAsyncWebServer in Version 1.2.0 zu liegen. Dort ist in der Datei AsyncJson.h folgender neuer Abschnitt enthalten:

Line 39: const char* JSON_MIMETYPE = "application/json";
Line 76:       _contentType = JSON_MIMETYPE;
Line 126:     if (!request->contentType().equalsIgnoreCase(JSON_MIMETYPE))

Wo diese Definition aber zuvor schon enthalten war, konnte ich bisher leider nicht erkennen. Mit Version 1.1.0 klappt aber alles wunderbar bei mir.

dnlGrande commented 6 years ago

Hi, danke für den schnellen Tipp...

Ist allerdings gar nicht so einfach die "alte" Version 1.1.0 oder 1.1.1 zu ziehen, da die ESPAsyncWebServer nicht in den Arduino Lib-Manager eingetragen ist, sondern man es direkt über Github ziehen muss. Ich bin jetzt den Umweg gegangen mir die ESPAsyncWebServer-Lib über PlatformIO IDE zu installieren und dort aus dem Lib-Ordner heraus zu kopieren und bei Arduino einzubinden (falls noch jemand das Problem bekommen sollte). Gibt es da noch einen einfacheren Weg?

Vielen Dank!

EinfachArne commented 6 years ago

Ich hatte vor dem Update die alten Versionen der Libraries gesichert und konnte daher alles problemlos rückgängig machen. Ansonsten stehen die Versionen aus dem Artikel hier noch zum Download: ftp://ftp.heise.de/pub/ct/listings/1802-064.zip

Ein anderer Weg ist mir auch nicht bekannt.

Freut mich, dass ich helfen konnte!

tfelix commented 6 years ago

Das Issue wurde bereits von 0xCodebase verlinkt. Es gibt auch eine Lösung die dort beschrieben ist, man kann in der ESPAsyncWebServer-Lib einfach die in dem Issue https://github.com/me-no-dev/ESPAsyncWebServer/issues/390 beschriebene Datei öffnen und ein const char* const JSON_MIMETYPE = "application/json"; aus der betreffenden Zeile machen. Hat bei mir dann geklappt da PlatformIO dann diese modifizierte Header Datei lädt und kompiliert.

merlinschumacher commented 6 years ago

Hallo allerseits!

Ich hab Basecamp ein bisschen stiefmütterlich behandelt in letzter Zeit. (Viel zu tun, Krank gewesen, WARRRRRM :sweat: ) Ich hab eben einen Pull-Request für https://github.com/me-no-dev/ESPAsyncWebServer/issues/390 eingereicht. Ich hoffe der Entwickler mergt das in absehbarer Zeit. Bis dahin könnt ihr diese ältere Version (https://github.com/me-no-dev/ESPAsyncWebServer/tree/1078e9166b9af03073f2293edcbd8342764c6940) der Bibliothek verwenden. Mit der lässt sich Basecamp problemlos übersetzen.

Liebe Grüße

Merlin