linking problem? AtmelStudio

OP #5755561
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!
Gast #5755617
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.
#5756076
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.
#5756108
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.
#5756134
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!
Gast #5756321
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
Gast #5756323
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.
#5756403
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.