mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Header und C Files


Autor: Marco Hinrichs (purzelbaum)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Moinsen :-),

ich habe wieder mal ein problem :-).

Also ich habe vor eine Funktion auszulagern.
Dazu habe ich eine lcd.h erstellt und verschiedenste *.c files.
So wenn ich nun in meinem Programm z.B. lcd_write('A'); aufrufe und dann 
das Programm compiliere kommt die Fehlermeldung:

MPLINK 4.37, Linker
Copyright (c) 1998-2010 Microchip Technology Inc.
Error - could not find definition of symbol 'lcd_write' in file 
'./main.o'.
Errors    : 1

Link step failed.

Das Programm, das ich verwende ist MPLAB 8.56 oder so :-) und der 
compiler ist der MCC18 von Microchip.

Im Anhang hab ich die lcd.h und die lcd_write.c.
Ich glaube das es am Programm liegt oder das ich irgendetwas falsch 
eingestellt hab.

Mit freundlichen Grüßen und schon mal mit bestem Dank

Marco Hinrichs

Autor: XXX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Hast du in main.c
include lcd.h
drin??

Gruß
Joachim

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marco Hinrichs schrieb:

> So wenn ich nun in meinem Programm z.B. lcd_write('A'); aufrufe und dann
> das Programm compiliere kommt die Fehlermeldung:
               **********

>
> MPLINK 4.37, Linker
               ******
> Copyright (c) 1998-2010 Microchip Technology Inc.
> Error - could not find definition of symbol 'lcd_write' in file
> './main.o'.
> Errors    : 1
>
> Link step failed.


Du musst alle deine *.c Files zu deinem Projekt hinzufügen.
Wie das bei MPLAB geht weiß ich nicht. Aber typischerweise heißen die 
entsprechenden Menüpunkte 'Add File' oder 'Add existing File' oder so 
was in der Art und sind in der Projektverwaltung zu finden.

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
- hast ein return zuviel im "lcd_write", da gehört keines hin...
- benutze in "lcd.h" mal öfter das Wörtchen "extern"

sonst sieht es ok aus

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dennis schrieb:
> - hast ein return zuviel im "lcd_write", da gehört keines hin...
> - benutze in "lcd.h" mal öfter das Wörtchen "extern"
>
> sonst sieht es ok aus


@Marco
Lass dich nicht ins Boxhorn jagen. So wie du das hast passt das schon. 
Dein Problem ist ein Problem der Projektverwaltung. Die weiß noch nicht, 
dass lcd_write.c auch zum Projekt mit dazugehört. Und das ist im Moment 
dein Problem und nicht irgendwelche syntaktischen Dinge.

C-Syntax                             zuständig ist der Compiler
Zusammenbau der Einzelteile zum kompletten Programm  ... Linker

Dein Fehler kommt vom Linker und nicht vom Compiler.

Autor: Marco Hinrichs (purzelbaum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke schon mal für die super duper schnellen antworten :-)

Dann fang ich mal an :-)

@ XXX
Ja ich hab #include "lcd.h" in meiner main.c stehen :-)

@ Dennis
extern sind doch nur um eine Variable im Header für mehrere C files 
global zu machen oder täusche ich mich ?

@ Karl heinz
Ich hatte auch schon den Linker unter verdacht und versuche das mal, die 
C files einzubinden.
Melde mich wenn ich weiteres in Erfahrung gebracht habe :-)

Autor: Marco Hinrichs (purzelbaum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So ich habe es gefunden :-)
War wirklich in der Projetverwaltung, wo man auswählen kann ob die 
relativ oder absolut sind :-)

Das ging echt leicht :-) aber ich hab in den c files vergessen delays.h 
zu inkludieren :-) aber das ist leicht gemacht.

Danke Karl heinz für diesen Tipp :-). Nach stunden des Scheiterns, denkt 
man nicht mehr an solch leichte Lösungen :-)

Gruß, der Marco :-)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marco Hinrichs schrieb:

> Danke Karl heinz für diesen Tipp :-). Nach stunden des Scheiterns, denkt
> man nicht mehr an solch leichte Lösungen :-)

Es hilft, wenn man Fehlermeldungen liest und auch mit den Augen in der 
Fehlermeldung nach links oder nach oben schwenkt um zu sehen, von wem 
sie kommt.

Autor: Marco Hinrichs (purzelbaum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:

> Es hilft, wenn man Fehlermeldungen liest und auch mit den Augen in der
> Fehlermeldung nach links oder nach oben schwenkt um zu sehen, von wem
> sie kommt.

Stimmt da steht, dass der Fehler vom Linker kommt.
Trotzdem hatte ich das problem, dass ich nicht wusste wie ich diesen 
Fehler beheben konnte. :-)
Aber jetzt weiß ich es.

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.