Forum: Compiler & IDEs LCD Library benutzen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Patrick B. (paddybo93)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,
ich versuche seit längerem die LCD Library von Peter Fleury zu benutzen, 
aber schaffe dies nicht. Ich benutze einen Atmega16 und Codeblocks mit 
dem GCC Compiler für AVR. Ich bekomme immer den Fehler undefined 
reference to...
Header und Source Datei sind zum Projekt hinzugefügt und den Projektpfad 
in das die Search Directories eingetragen.
Hat jemand eine Idee woran es liegen kann? Ich hatte das Display mit 
einem Atmega8515 schon einmal zum laufen bekommen, liegt das an dem 
Atmega16? Ich habe leider das alte Projekt nicht mehr. Ich habe im 
Anhang noch ein Bild von der Projektstruktur und dem Fehler.

Schöne Grüße
Paddy

von löti (Gast)


Bewertung
0 lesenswert
nicht lesenswert
muss das nicht lcd_clear heisen?

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
1 lesenswert
nicht lesenswert
Gibt es einen Grund, warum "main.cpp" als C++-Code geschrieben ist?

Ist in der "lcd.h" die für den Aufruf aus C++-Code nötige 'extern 
"C"'-Verpackung enthalten?

von Patrick B. (paddybo93)


Bewertung
0 lesenswert
nicht lesenswert
löti, nein das ist so richtig. Codeblocks hat mir das auch so 
vorgeschlagen. Hab extra noch einmal nachgesehen. Die anderen LCD 
Funktionen habe ich ersteinmal auskommentiert, aber bei denen gibt es 
auch diesen Fehler.

mhhh stimmt an die cpp datei habe ich noch nicht gedacht. Ich habe sie 
in c++ geschrieben weil mir das besser liegt, ich dachte das c++ auch c 
benutzen kann. Ich erstelle mal eine main in c.

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Patrick B. schrieb:
> ich dachte das c++ auch c benutzen kann.

Kann man, man muss nur die Deklarationen der daraus aufgerufenen 
C-Funktionen in 'extern "C"' verpacken.

Also:

blafusel.h
1
#ifdef  __cplusplus
2
extern "C" {
3
#endif
4
5
int meine_funktion(int irgendwas);
6
void nochnefunktion(void);
7
8
#ifdef  __cplusplus
9
}
10
#endif

Das musst Du also in die lcd.h einbauen.

Sollte das schon drinstehen, hast Du allerdings ein anderes Problem.
Falls

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
Oder die .c-Dateien nach .cpp umbenennen.

Oliver

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Oliver S. schrieb:
> Oder die .c-Dateien nach .cpp umbenennen.

Was nicht funktionieren muss; nicht alles, was legales C ist, akzeptiert 
ein C++-Compiler.

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
Die Fleury-Libs sollten da aber unproblematisch sein.

Olivet

von Patrick B. (paddybo93)


Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die schnellen Antworten,

ich habe die lcd.h nun unter extern "C" includiert, jetzt lässt sich das 
Programm übersetzen. Vielen Dank ihr habt mir sehr geholfen :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.