Diverse Fehlermeldungen: "undefined reference to...."

Nachdem ich in einem Sketch noch etliche kleine Fehler ausgemerzt hatte, bekomme ich nun zahlreiche dieser Fehlermeldungen am Ende des Kompiliervorgangs. Woran liegt es oder gibt es Probleme mit Bibliotheken? Ich bin ratlos. :thinking:

"c:/users/abrax/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Abrax\AppData\Local\Temp\arduino\sketches\8D96FCF2746E11D1639267A366BC55CE\sketch\MySQL_Temperatur.ino.cpp.o:(.literal._Z5setupv+0xc): undefined reference to DHT::begin(unsigned char)' c:/users/abrax/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Abrax\AppData\Local\Temp\arduino\sketches\8D96FCF2746E11D1639267A366BC55CE\sketch\MySQL_Temperatur.ino.cpp.o:(.literal._Z10dht11_Datav+0x10): undefined reference to DHT::readTemperature(bool, bool)'
c:/users/abrax/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Abrax\AppData\Local\Temp\arduino\sketches\8D96FCF2746E11D1639267A366BC55CE\sketch\MySQL_Temperatur.ino.cpp.o:(.literal._Z10dht11_Datav+0x14): undefined reference to DHT::readHumidity(bool)' c:/users/abrax/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Abrax\AppData\Local\Temp\arduino\sketches\8D96FCF2746E11D1639267A366BC55CE\sketch\MySQL_Temperatur.ino.cpp.o:(.literal.startup._GLOBAL__sub_I_dht11+0x4): undefined reference to DHT::DHT(unsigned char, unsigned char, unsigned char)'
c:/users/abrax/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Abrax\AppData\Local\Temp\arduino\sketches\8D96FCF2746E11D1639267A366BC55CE\sketch\MySQL_Temperatur.ino.cpp.o: in function setup()': C:\Users\Abrax\Desktop\Documents\Arduino\MySQL_Temperatur/MySQL_Temperatur.ino:44: undefined reference to DHT::begin(unsigned char)'
c:/users/abrax/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Abrax\AppData\Local\Temp\arduino\sketches\8D96FCF2746E11D1639267A366BC55CE\sketch\MySQL_Temperatur.ino.cpp.o: in function dht11_Data()': C:\Users\Abrax\Desktop\Documents\Arduino\MySQL_Temperatur/MySQL_Temperatur.ino:48: undefined reference to DHT::readTemperature(bool, bool)'
c:/users/abrax/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Abrax\Desktop\Documents\Arduino\MySQL_Temperatur/MySQL_Temperatur.ino:48: undefined reference to DHT::readHumidity(bool)' c:/users/abrax/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Abrax\AppData\Local\Temp\arduino\sketches\8D96FCF2746E11D1639267A366BC55CE\sketch\MySQL_Temperatur.ino.cpp.o: in function _GLOBAL__sub_I_dht11':
C:\Users\Abrax\Desktop\Documents\Arduino\MySQL_Temperatur/MySQL_Temperatur.ino:7: undefined reference to `DHT::DHT(unsigned char, unsigned char, unsigned char)'"

Mein Sketch:

#include <WiFi.h>
#include <HTTPClient.h>

#include <DHT.h>
#define DHTPIN 19
#define DHTTYPE DHT11
DHT dht11(DHTTYPE, DHTPIN);


String URL = "http://url.de/test5.php";

const char* ssid = "FRITZ!Box 7362 SL";
const char* password = "**************";

int temperatur = 10;
int feuchte = 10;


void setup() {
  Serial.begin(115200);

  dht11.begin();

  connectWiFi();

}

void connectWiFi() {
  WiFi.mode(WIFI_OFF);
  delay(1000);
  //This line hides the viewig ...
  WiFi.mode(WIFI_STA);

  WiFi.begin(ssid, password);
  Serial.println("Verbindungsaufbau WLAN");

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.print("verbunden mit:"); Serial.println(ssid);
  Serial.print("IP-Adresse: "); Serial.println(WiFi.localIP());
}

void dht11_Data() {

  temperatur = dht11.readTemperature();
  feuchte = dht11.readHumidity();

  if (isnan(temperatur) || isnan(feuchte)) {
    Serial.println("Vom Sensor zu lesen ist fehlgeschlagen!");
    temperatur = 0;
    feuchte = 0;
    }

    Serial.printf("Temperatur: %d \n°C", temperatur);
    Serial.printf("Luftfeuchtigkeit: %d %%\n", feuchte);
}

void loop() {
  if(WiFi.status() != WL_CONNECTED) {
    connectWiFi ();
  }
  dht11_Data();

  HTTPClient http;
  http.begin(URL);
  http.addHeader("Content-Type", "application/x-www-form-urlencoded");

  String postData = "temperatur=" + String(temperatur) + "&feuchte=" + String(feuchte);

  

  int httpCode = http.POST(postData);
  String payload = http.getString();
  

  Serial.println("");
  Serial.print("URL  : "); Serial.println(URL);
  Serial.print("Daten: "); Serial.println(postData);
  Serial.print("httpCode: "); Serial.println(httpCode);
  Serial.print("payload : "); Serial.println(payload);
  Serial.print("-------------------------------------------");
  delay(10000);
}

Der Linker findet die Library für DHT nicht.


abrafax123

1 minpost #3

Ok, ich habe immer Probleme damit über den Bibliotheksmanager Libraries zu installieren und bekommen dabei folgende Fehlermeldung: "Eine bestehende Verbindung wurde softwaregesteuert durch den Hostcomputer unterbrochen" und versuchte die Bibliothek manuell zu installieren. Liegt es daran?

Liegt es an der Windows-Firewall? Wie kann man hier eine Ausnahme erstellen?

Knackpunkt ist meistens, die „richtige“ Bibliothek zu erwischen. Gerade bei diesen Temperatursensor Bibliotheken gibt es viele verschiedene und sie muss in dem richtigen Verzeichnis installiert sein. Wenn mehrere installiert sind, die als include „DHT11.h“ eingebunden werden, kann das auch ärger machen.

Wenn die Bibliothek per Browser z.B. direkt von Github herunter geladen werden kann, sollte es eigentlich kein Problem mit der Windows-Firewall geben. Will ich nicht ausschließen, halte ich aber erst mal für unwahrscheinlich.

Ich glaub' du hast ein Problem mit deinem Netzwerk. Davon abgesehen: entweder sie wird runtergeladen und installiert oder nicht, irgendwas dazwischedn gibt's nicht.

Scheinbar doch: Denn am Anfang erhielt ich die Meldung das die DHT.h gar nicht existiert. Auch bei manueller Installation über .zip findet er sie nicht. Es geht nur, wenn ich die h-Datei manuell in den Sketch-Ordner kopiere. Könnte es daran liegen?

Und wie kann man das lösen?

Du hast also die Library nicht installiert.

DHT-h aus dem Ordner löschen, das ZIP von der Library runterladen, im arduino/sketchbook/libraries Ordner entpacken und neu probieren (IDE1.8.19)

"arduino/sketchbook/libraries"

Diesen Ordner gibt es bei mir gar nicht.
Der libraries-Ordner ist bei mir in: C:\Benutzer*Name*\Desktop\Dokumente\Arduino\

Ich habe die libraries dorthin manuell kopiert, aber es ändert sich leider nichts. Ich glaube er sucht an dieser Stelle auch gar nicht danach.

Schau in dein .arduino15/preferences.txt, da gibt's einen Eintrag sketchbook.path=.... - was auch immer der pfad da iat, dadrinnenexistiert ein libraries-Directory. Dorthin muss das ZIP entpackt werden.

Hallo zwieblum, danke für die schnelle Hilfe. Ich habe den Arduino15 Ordner gefunden. Der Inhalt sieht so aus:

inventory.yaml
library_index.json
library_index.json.sig
package_esp32_index.json
package_index.json
package_index.json.sig

Die preferences.txt existiert nicht, nirgendwo auf dem Rechner. Vielleicht ist das ja die Ursache für die Probleme?

ArduinoIDE -> Datei -> Voreinstellungen, 1. Zeile (zumendest bei mir)

Das ist bei mir:

c:\Users\Benutzername\Desktop\Documents\Arduino

Da ist auch ein Ordner libraries und da sind alle entsprechend drin die gebraucht werden.

die DHT auch?

Die IDE 2.xx hat keine preferences.txt. Um die unter 1.8.19 finden reicht auf die references.txt draufklicken, kommt man automatisch in den Ordner, IDE zu machen in den Ordner wechseln dort die ganz einfach löschen, IDE neu starten somit wird die preferences.txt neu angelegt mit passenden Patch.
Meistens kommen Probleme mit den IDE Ordner wen man die IDE löscht und neu installieret, da hilft nur Händisch alles was mit Arduino zu tun hat löschen im Windows C:\Users\benutzer Nahmen\AppData\Roaming\Arduino IDE
Users ist versteckt erstmal unter C:/ Benutzer.

Das werde ich mal ausprobieren!

Ich habe die Arduino IDE auf einem Zweitrechner installiert, dort funktioniert das Sketch auch., dh. es läuft erstmal.

Als Zweites wäre noch zu klären, wie sich die Blockade der Downloads der IDE beheben lassen?

Das hat mir insofern geholfen, dass ich die Arduino IDE 2 nochmal erfolgreich installieren konnte und auch nun die Bibliotheken planmäßig geladen werden.

Ich wunderte mich, als ich den Ordner Arduino15 manuell löschte - dieser war mehrere Gigabyte groß?!

Die Programmierer sind nicht sparsam, da kommt schon was zusammen bei dem allem was muss verarbeitet werden :wink:
Was mich eigentlich nicht stört, Hauptsache es funktioniert.