Forum: Mikrocontroller und Digitale Elektronik linking problem? AtmelStudio


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 Schraubt G. (g-schraubt)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Danke für deinen tip, werde es mal versuchen!

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
Der linker parst keine .h-Dateien.

Zeig doch mal die ganze Fehlermeldung.

Oliver

von Hdudzevdjfd (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Tippe auf fehlenden include guard.

von Tim T. (tim_taylor) Benutzerseite


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

von Bernd K. (prof7bit)


Bewertung
0 lesenswert
nicht 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:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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:

Bewertung
0 lesenswert
nicht lesenswert
ich hoffe, ich verstehe dich richtig. meinst du den code im makefile?
lg

von Tim T. (tim_taylor) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Deine Main Funktion fehlt...

von Bernd K. (prof7bit)


Bewertung
0 lesenswert
nicht 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)


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

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht lesenswert
Bernd K. schrieb:
> Du

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

Oliver

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.