Forum: Mikrocontroller und Digitale Elektronik linking problem? AtmelStudio


von Schraubt G. (g-schraubt)


Lesenswert?

hallo leute,
seit kurzem kommt es immer wieder vor, dass beim einfügen einer .h datei 
folgender fehler auftritt:

# "ld returned 1 exit status
# "recipe for target 'i2c.elf' failed

ich habe wie immer ein projekt erstellt, in den projektordner das .h 
file kopiert und dann über "rechte maustaste - add - existing item" 
eingefügt.

woran könnte das liegen?

ps: andere projekte, bei denen ich das gleiche gemacht habe, 
funktionieren.


Danke!

von Selbsterfahrung (Gast)


Lesenswert?

Schraubt G. schrieb:
> woran könnte das liegen?

könnte Folgendes:

Deine H-Datei hat einen Fehler der solange dem Parser nicht auffällt
bis die entsprechende *.c Datei nach dem Include geparst wird und
dann (im Zusammenhang mit dem Fehler in der H-Datei) einen Syntax-
Fehler findet.

Also die H-Datei mal sorgfältig nach "Problemen" durchforsten.

von g-schraubt (Gast)


Lesenswert?

Danke für deinen tip, werde es mal versuchen!

von Oliver S. (oliverso)


Lesenswert?

Der linker parst keine .h-Dateien.

Zeig doch mal die ganze Fehlermeldung.

Oliver

von Hdudzevdjfd (Gast)


Lesenswert?

Tippe auf fehlenden include guard.

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Einfacher wäre es natürlich wenn der OP die Header Datei mal zeigen 
würde...

von Bernd K. (prof7bit)


Lesenswert?

Erwartest Du daß hier alle hellsehen können? Wie wärs wenigstens mal die 
eigentliche Fehlermeldung zu posten?

Ich rate mal: Du hast vergessen die .c Datei(en) die zu dem Header dazu 
gehört (in der alle Funktionen letztendlich implementiert sind die im 
Header nur vorab angekündigt werden) mit ins Projekt aufzunehmen. Jetzt 
willst Du irgendeine dieser Funktionen aufrufen und der Linker kann die 
eigentliche Implementierung nirgends finden.

Bahnhof?

Zum Umgang mit Compiler und Linker, zum Verständnis was die wann und 
womit tun, in welcher Reihenfolge und wie das ales zusammenhängt mit .h 
und .c Dateien und welche Auswirkungen das hat empfehle ich DRINGEND ein 
grundlegendes C-Tutorial von vorne bis hinten durchzuackern! Gründlich 
und erschöpfend! Ein Mindestverständnis der Zusammenhänge ist 
unabdingbar! Es bringt nur Frust für alle beteiligten (auch die 
Hilfeleistenden) wenn auf Teufel komm raus der zwölfte Schritt vor dem 
ersten gemacht werden soll.

: Bearbeitet durch User
von Schraubt G. (g-schraubt)


Angehängte Dateien:

Lesenswert?

Danke für eure Antworten.
Ich dachte, dass die oben erwähnten Fehlermeldungen schon sehr typisch 
für irgendetwas sein könnten.

anbei nun die .c und .h datei inklusive der fehlermeldung.

schöne Grüße!

von Bernd K. (prof7bit)


Lesenswert?

Schraubt G. schrieb:
> Ich dachte, dass die oben erwähnten Fehlermeldungen

Das ist keine Fehlermeldung, das ist nur eine rote Alarmleuchte! So viel 
wie "ein Fehler ist aufgetreten", mehr nicht! Man kann gerade noch 
erkennen daß der Linker es war der gestolpert ist ("ld"), aber nicht 
warum.

Die eigentlichen Fehlermeldungen im originalen Wortlaut mit 
ausführlicher Begründung und noch viel mehr sind in der Konsole des 
Buildvorgangs zu finden, das Fenster in dem der viele Text durchrauscht. 
Das ist das einzige was zählt, das einzige worauf Verlass ist und das 
einzige das interessiert.

: Bearbeitet durch User
von Schraubt G. (g-schraubt)


Angehängte Dateien:

Lesenswert?

ich hoffe, ich verstehe dich richtig. meinst du den code im makefile?
lg

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Deine Main Funktion fehlt...

von Bernd K. (prof7bit)


Lesenswert?

Schraubt G. schrieb:
> ich hoffe, ich verstehe dich richtig. meinst du den code im
> makefile?
> lg

Nein. Das build log. Das was auf der Konsole erscheint. Weiter oben hab 
ich ein paar Tips gegeben: Einmal meine hellseherische Vermutung zum 
konkreten Problem und weiterhin den Vorschlag am Anfang anzufangen und 
nicht mitten drin. Das ist zwar ein zeitaufwendiger Prozess aber er ist 
absolut notwendig.

Als Lektion 1 lernst Du jetzt erstmal wo die Fehlermeldungen rauskommen 
und wie man die liest. Da steht dann meist klipp und klar drin wo der 
Fehler zu suchen ist. Betrachte diese Lektion als von mir hiermit 
angeordnet und führe sie durch!

: Bearbeitet durch User
von Marco H. (damarco)


Lesenswert?

warum benutzt du nicht ein template ? Wenn du schon nicht erkennen 
kannst wo du ein Problem hast...

von Oliver S. (oliverso)


Lesenswert?

Wie Tim schon schrieb, fehlt die main-Funktion.

Und vermutlich sämtliche anderen Grundlagen der verwendeten 
Programmiersprache.

Such dir ein gutes Buch, und lies dich ein.

Oliver

: Bearbeitet durch User
von my2ct (Gast)


Lesenswert?

Bernd K. schrieb:
> Ich rate mal: Du hast vergessen die .c Datei(en) die zu dem Header dazu
> gehört (in der alle Funktionen letztendlich implementiert sind die im
> Header nur vorab angekündigt werden) mit ins Projekt aufzunehmen. Jetzt
> willst Du irgendeine dieser Funktionen aufrufen und der Linker kann die
> eigentliche Implementierung nirgends finden.

Und warum sagt die Kiste dann nicht, dass sie die Implementation von der 
und der Funktion nicht finden kann?
Sch..ß gefrickeltes C

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

my2ct schrieb:
> Bernd K. schrieb:
>> Ich rate mal: Du hast vergessen die .c Datei(en) die zu dem Header dazu
>> gehört (in der alle Funktionen letztendlich implementiert sind die im
>> Header nur vorab angekündigt werden) mit ins Projekt aufzunehmen. Jetzt
>> willst Du irgendeine dieser Funktionen aufrufen und der Linker kann die
>> eigentliche Implementierung nirgends finden.
>
> Und warum sagt die Kiste dann nicht, dass sie die Implementation von der
> und der Funktion nicht finden kann?
> Sch..ß gefrickeltes C

Weil das hier nicht das Problem ist...

Da in der Header Datei nur Forward-Deklarationen drin sind und in der 
Implementation keine Abhängigkeiten zwischen den Funktionen existieren, 
könnte er sie auch weglassen. Auf die Nase fällt er wegen der fehlenden 
Main trotzdem.

: Bearbeitet durch User
von Schraubt G. (g-schraubt)


Lesenswert?

Danke Leute!
es lag wirklich an der fehlenden main.
jetzt komme ich endlich weiter (:

werde natürlich weiterhin üben, üben, üben.

Danke euch allen!

von Bernd K. (prof7bit)


Lesenswert?

my2ct schrieb:
> Und warum sagt die Kiste dann nicht, dass sie die Implementation von der
> und der Funktion nicht finden kann?

Die Kiste sagt schon klipp und klar was der Fehler ist, nur Du bist 
anscheinend auch nach über 12 Stunden noch unfähig die Konsole mit den 
Build-Meldungen direkt vor Deiner Nase zu finden und zu lesen was dort 
steht. In deinem Fall steht dort klipp und klar schwarz auf weiß daß der 
linker main nicht finden kann. Du hättest Dir und uns allen den ganzen 
schwachsinnigen Thread sparen können.

von Oliver S. (oliverso)


Lesenswert?

Bernd K. schrieb:
> Du

Je nun, nicht jeder, der planlos über C herzieht, ist auch ein TO.

Oliver

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.