INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Undefined reference-Fehler beim Kompilieren
24.03.2020, 11:49
Beitrag #1
Undefined reference-Fehler beim Kompilieren
Hallo,

bin neu hier und beim Arduino, und gerade in einer Sackgasse. Hab mir einen LED-Strip gekauft und möchte damit einen Sonnenaufgang simulieren (später noch andere Funktionen). Das hat auch soweit funktioniert, aber jetzt wollte ich das der Übersicht halber und für künftige Projekte mal in eine Library auslagern, und zwar so, dass man im Sketch nichts mehr mit der eigentlichen LED-Ansteuerung zu tun hat (sonst lohnt es sich nicht). Problem: Die LEDs werden als Klasse angesteuert, also musste ich in meiner Library auch eine Klasse bereitstellen. Dass das ganze über Timer/Interrupt laufen soll, machte es etwas kompliziert. Hier habe ich dieses Beispiel übernommen.

Die meisten Fehler konnte ich selbst beheben, aber beim Versuch zu Kompilieren, bekomme ich mehrere undefined reference to `NatureFadeIR' Fehler und schließlich collect2.exe: error: ld returned 1 exit status, wobei NatureFadeIR die Instanz der Hilfsklasse für den Interrupt ist, im Prinzip exakt so wie im verlinkten Beispiel ("extern NatureFade NatureFadeIR;" <-> "extern CTimer0 Timer0"). Seltsamerweise treten die Fehler nicht etwa in der CPP-Datei der Hilfsklasse auf, sondern in der eigentlichen Klasse innerhalb einer Funktion, die gar nichts mit der Hilfsklasse zu tun hat Huh

Also woran liegt's? Sad

Hier die Fehlermeldungen:
Zitat:Arduino: 1.8.12 (Windows 7), Board: "Arduino Uno"

C:\Users\ \AppData\Local\Temp\ccdtKWTD.ltrans0.ltrans.o: In function `FastSunFade':

D:\Dokumente\Arduino\libraries\NatureFade/NatureFade.cpp:92: undefined reference to `NatureFadeIR'

D:\Dokumente\Arduino\libraries\NatureFade/NatureFade.cpp:93: undefined reference to `NatureFadeIR'

D:\Dokumente\Arduino\libraries\NatureFade/NatureFade.cpp:94: undefined reference to `NatureFadeIR'

D:\Dokumente\Arduino\libraries\NatureFade/NatureFade.cpp:97: undefined reference to `NatureFadeIR'

D:\Dokumente\Arduino\libraries\NatureFade/NatureFade.cpp:99: undefined reference to `NatureFadeIR'

C:\Users\...\AppData\Local\Temp\ccdtKWTD.ltrans0.ltrans.o: D:\Dokumente\Arduino\libraries\NatureFade/NatureFade.cpp:99: more undefined references to `NatureFadeIR' follow

collect2.exe: error: ld returned 1 exit status

exit status 1

Danke im Voraus!


Angehängte Datei(en)
.cpp  NatureFade.cpp (Größe: 4,46 KB / Downloads: 15)
.h  NatureFade.h (Größe: 1,11 KB / Downloads: 15)
.cpp  TimerInterrupt.cpp (Größe: 688 Bytes / Downloads: 15)
.h  TimerInterrupt.h (Größe: 543 Bytes / Downloads: 14)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.03.2020, 12:00 (Dieser Beitrag wurde zuletzt bearbeitet: 24.03.2020 12:01 von Tommy56.)
Beitrag #2
RE: Undefined reference-Fehler beim Kompilieren
Stelle Deinen Sketch bitte in Codetags.
Wie das geht, steht hier.
Das kannst Du auch noch nachträglich ändern.

Wo ist Deine .ino?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.03.2020, 20:16
Beitrag #3
RE: Undefined reference-Fehler beim Kompilieren
(24.03.2020 12:00)Tommy56 schrieb:  Wo ist Deine .ino?

Es gibt keinen Sketch. Der Fehler tritt in der Library auf.

Um den Fehler zu reproduzieren genügt es, die Library in einen leeren Sketch zu includen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.03.2020, 20:25
Beitrag #4
RE: Undefined reference-Fehler beim Kompilieren
Ok. In der Datei TimerInterrupt-1.cpp steht:

Code:
extern NatureFade NatureFadeIR;

NatureFadeIR ist aber nirgends real als Instanz angelegt. Deshalb mault der Linker.
Der sollte wohl dann in der .ino angelegt werden.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.03.2020, 20:48
Beitrag #5
RE: Undefined reference-Fehler beim Kompilieren
(24.03.2020 20:25)Tommy56 schrieb:  Ok. In der Datei TimerInterrupt-1.cpp steht:

Code:
extern NatureFade NatureFadeIR;

NatureFadeIR ist aber nirgends real als Instanz angelegt. Deshalb mault der Linker.
Der sollte wohl dann in der .ino angelegt werden.

Gruß Tommy

Ok, danke. In der .ino möchte ich diese Hilfs-Instanz nicht anlegen; der Plan war, nur die Haupt-Instanz anlegen zu müssen und sonst alles aus der .ino rauszuhalten. Die fragliche Zeile habe ich ja wie erwähnt 1:1 aus dem Beispiel übernommen, habe es so verstanden, dass die Hilfs-Instanz von der Haupt-Instanz "automatisch" angelegt wird. Das scheint aber nicht so zu funktionieren?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.03.2020, 20:56
Beitrag #6
RE: Undefined reference-Fehler beim Kompilieren
(24.03.2020 20:48)MdE schrieb:  habe es so verstanden, dass die Hilfs-Instanz von der Haupt-Instanz "automatisch" angelegt wird. Das scheint aber nicht so zu funktionieren?
Das wird sie nicht.
Das ist auch keine Hilfsinstanz, das ist die Instanz, auf der der Interrupt arbeitet.
Wenn Du dessen Wirkung brauchst, ist das wohl Deine Hauptinstanz.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.03.2020, 21:11
Beitrag #7
RE: Undefined reference-Fehler beim Kompilieren
(24.03.2020 20:56)Tommy56 schrieb:  Das wird sie nicht.
Das ist auch keine Hilfsinstanz, das ist die Instanz, auf der der Interrupt arbeitet.
Wenn Du dessen Wirkung brauchst, ist das wohl Deine Hauptinstanz.

Gruß Tommy

Das heißt, das "friend class ..." in der angenommenen Haupt-Instanz ist reine Formsache? Na gut.

Habe jetzt in der TimerInterrupt.cpp den Instanznamen an den Namen angepasst, den ich in einem Testsketch gewählt habe, und das funktioniert augenscheinlich. Muss nur noch prüfen, ob die Interrupts alle mitgenommen werden (weil die NeoPixels da wohl Probleme machen könnten).

Vielen Dank Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.03.2020, 21:23
Beitrag #8
RE: Undefined reference-Fehler beim Kompilieren
(24.03.2020 21:11)MdE schrieb:  Das heißt, das "friend class ..." in der angenommenen Haupt-Instanz ist reine Formsache? Na gut.
Nein, ist es nicht.

Friend-Klassen können direkt auf private und protected Members zugreifen.

Grundlagen lernen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Fehlermeldung beim Sketch hochladen heino_m 12 374 28.05.2020 18:25
Letzter Beitrag: Tommy56
  Fehler bei delay über 32767 Kleingärtner 5 308 07.05.2020 18:51
Letzter Beitrag: Kleingärtner
  Wo ist der RxD1 beim Wemos D1 mini? DO3GE 3 220 03.05.2020 12:33
Letzter Beitrag: Fips
  Fehler bei eigener Library Samu_wo 4 278 20.04.2020 15:51
Letzter Beitrag: Samu_wo
  Verschiedene Spannungen beim Schalten von Relais? Wosch 4 290 19.04.2020 16:33
Letzter Beitrag: Tommy56
  Fehler beim Kompilieren Lunge 6 378 09.04.2020 14:07
Letzter Beitrag: MicroBahner
  Timeout beim Hochladen freak76 5 353 06.04.2020 08:54
Letzter Beitrag: GuaAck
  Stepper Motor mit zwei Taster bedienen / Fehler ohne Fehlermeldung Milano 6 492 21.03.2020 16:06
Letzter Beitrag: MicroBahner
  Fehler bei Kompilieren ak68 6 794 21.03.2020 13:12
Letzter Beitrag: Tommy56
  Arduino Taster - Welcher Fehler? lil.chem 4 543 10.02.2020 22:39
Letzter Beitrag: Franz54

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste