Forum: Mikrocontroller und Digitale Elektronik Header und C Files


von Marco H. (purzelbaum)


Angehängte Dateien:

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

von XXX (Gast)


Lesenswert?

Hallo

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

Gruß
Joachim

von Karl H. (kbuchegg)


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.

von Dennis (Gast)


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

von Karl H. (kbuchegg)


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.

von Marco H. (purzelbaum)


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 :-)

von Marco H. (purzelbaum)


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 :-)

von Karl H. (kbuchegg)


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.

von Marco H. (purzelbaum)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.