undefined reference to `_ZN8GPIO_Pin2OnEh'

OP #7605155
Lesenswert?
• ▲
▼

Bin gerade dabei einen mehrseitigen Code zu strukturieren (die Scrollerei nervt). Da ich kaum Ahnung von objektorientierter Programmierung habe, versuche ich mich an einem einfachen Script (Board isr ESP8266 mit PlatformIO). Der Compiler gibt immer Fehlermeldung undefined reference to `_ZN8GPIO_Pin2OnEh' meine main:

1
//#include <Arduino.h>
2
#include "..\lib\GPIO.h"
3
GPIO_Pin LED;
4
void setup() {
5
  // pinMode(LED_BUILTIN, OUTPUT);
6
  LED.On (LED_BUILTIN);
7
}
8
void loop() {/*
9
  digitalWrite(LED_BUILTIN, HIGH);                        
10
  delay(250);                                                digitalWrite(LED_BUILTIN, LOW);                          
11
  delay(250);                                           
12
  */
13
}

meine h-Datei:

1
#if defined(ARDUINO) && ARDUINO >= 100
2
#include <arduino.h>
3
#else
4
#include "WProgram.h"
5
#endif
6
#ifndef __GPIO_h 
7
#define __GPIO_h
8
class GPIO_Pin { 
9
private:
10
     byte GPIO_Pin;
11
public:
12
   void On(byte GPIO_Pin); 
13
};
14
#endif

meine cpp-Datei

1
#include "..\lib\GPIO.h"
2
void GPIO_Pin::On(uint8_t GPIO_Pin){
3
    pinMode(GPIO_Pin, OUTPUT);
4
    digitalWrite (GPIO_Pin,HIGH);
5
}

Kann mir jemand auf die Sprünge helfen???

[Edit: code-tags hinzugefügt - Mod.]

Angehängte Dateien:
#7605166
Lesenswert?
• ▲
▼

Schau mal in deinen "lib"-Ordner, da sollte eine README vom Projekt-Init drinnen liegen, die dir sagt, dass du einen Unterordner unter lib brauchst.

d.H. pack dein GPIO.cpp /GPIO.h in einen "myGPIO" Ordner unterhalb von lib, pass die includes an, und es sollte passen.

BTW, ändert aber nix an deinem Problem: Michael schrieb im Beitrag #7605155:

#include "..\lib\GPIO.h"

ist unschön, der Pfad-Trenner für #includes ist "/", nicht "".

Und vmtl. reicht dir später ein #include <GPIO.h>, wenn die Dateien im richtigen Ordner liegen.

Und der Header heißt "Arduino.h", nicht "arduino.h"...

und welchen sinn macht dein byte GPIO_Pin; Member in der Klasse, wenn du sie nie verwendest?

--> Im Anhang wie's zumindest kompiliert.

Angehängte Dateien:
OP #7605197
Lesenswert?
• ▲
▼

Εrnst B. schrieb:

d.H. pack dein GPIO.cpp /GPIO.h in einen "myGPIO" Ordner unterhalb von lib, pass die includes an, und es sollte passen.

das habe ich getan Fehlermeldung: lib\MyGPIO\GPIO.cpp:1:10: fatal error: ../lib/MyGPIO/GPIO.h: No such file or directory

ist unschön, der Pfad-Trenner für #includes ist "/", nicht "".

habe ich geändert, kommt vom DOS / ist besser, da keien ALTGR-Taste nötig.

Und der Header heißt "Arduino.h", nicht "arduino.h"...

meine Nachlässigkeit

und welchen sinn macht dein byte GPIO_Pin; Member in der Klasse, wenn du sie nie verwendest?

ist für später

Und vmtl. reicht dir später ein #include <GPIO.h>, wenn die Dateien im richtigen Ordner liegen.

Die Struktur habe ich nicht verstanden. Welcher Ordner ist denn der richtige? Habe die 2 Dateien auch in den include Ordner gepackt, mit der selben Fehlermeldung. Der Editor bietet sie mir zum auswählen an.

Nachtrag: liegen sie im Include-Ordner lautet die Fehlermeldung c:/users/otistoshiba/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/bin/ld.exe: .pio\build\nodemcu\src\main.cpp.o:(.text.setup+0x4): undefined reference to `_ZN8GPIO_Pin2OnEh' collect2.exe: error: ld returned 1 exit status *** [.pio\build\nodemcu\firmware.elf] Error 1

Nachtrag: liegen sie im selben Ordner wie main, läuft der Compiler durch. Da habe ich das mit den Ordnern wohl überhaupt nicht verstanden.

Thx erstmal

OP #7605237
Lesenswert?
• ▲
▼

Jim M. schrieb:

Die GPIO.o die vom GPIO.cpp erstellt wurde wird aus irgendeinem Grund nicht mit an den Linker verfüttert.

Mach mal in die GPIO.cpp ein

[c] #error 1

undefined reference to `_ZN8GPIO_Pin3OffEh' bleibt als Fehler. Kompiliert sauber wenn die Dateien im main.cpp Ordner liegen. Der Editor zeigt mir aber dem / die weiteren Ordner/Dateien zu Auswählen an. Was bewirkt die Direktive #error1

thx

Nachtrag: #error-Direktive wird verwendet, um den Kompilierungsvorgang mit einer (optionalen) Fehlermeldung abzubrechen habe ich gelesen. Ist meine Schlußfolgerung richtig, dass der Compiler das cpp nicht compiliert, ansonsten würde der eine 1 als Fehlermeldung ausgeben?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.