www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik GCC Compiler erzeugt keine .elf Datei


Autor: Matthias Jung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich programmiere einen Atmel AT90PWM3 mit dem Atmel AVR Studio Version
4.12 und dem GCC Compiler. Ich habe schon ein Programm geschrieben, da
hat alles prima funktioniert. Wenn ich jedoch ein Neues Programm durch
das Programm jage, bekomme ich immer eine Fehlermeldung:

gcc plug-in: Error: Object file not found on expected location
C:\...\Eigene Dateien\Neu_TxD\default\Neu_TxD.elf

Die entsprechende Datei ist auch nicht vorhanden. Compellieren lassen
sich die entsprechenden Programme jedoch fehlerlos. Woran liegt es dass
der Compiler diese .elf Datei nich tmehr erzeugt??

Vielen Dank
Matthias

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du hast ein Leerzeichen im Pfad!

Autor: Matthias Jung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie meinst du das? ICh habe doch extra einen Unterstrich benutzt. Ich
habe schon 2 Programme im gleichen Ordner, die auch einen Unterstrich
im Namen haben

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigene Dateien
      ^

Autor: Matthias Jung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das bringt keinen Durchbruch, es kommt immer noch der gleiche Fehler.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es eine ausführlichere Fehlermeldung?

Was steht im Makefile bzw. in den vom Makefile aufgerufenen Makerules?


Hast du schon Echo-Ausgaben vor die Toolaufrufe ins Makefile eingefügt,
um Kommandozeilen mitzubekommen?

Hast du schon verbose Ausgaben der Tools angeschaltet, um Include- und
Library-Pfade mitzubekommen?

Hast du schon einen Filemonitor (z.B. FILEMON von www.sysinternals.com)
eingesetzt, um Dateizugriffe generell zu protokollieren?

Autor: ;-) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reichen dir nicht auch .zehn Dateien duck und weg ;-)

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe genau dasselbe Problem, manchmal kommt diese Fehlermeldung die ich
dann nicht mehr weg bekomme, muss dan jedesmal nen neuens Projekt
anlegen. Vorher haben 20 oder mehr Compilerläufe einwandfrei
funktioniert.

Autor: Otto Richter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi da draußen,

hatte den Fehler auch schon oft. 'Mal war er dann wieder weg und dann
'mal wieder da.

Vor 1 Stunde kam er wieder. Nun habe ich folgendes gemacht:  Ich habe
die Änderungen im source rückgängig gemacht, und siehe da, gcc
compilierte ohne Fehlermeldung.

Die Fehlermeldung wird also durch einen Fehler im Quellcode ausgelöst
!!!

Ich hab's dann auch schnell gefunden:

Ich habe in einem file "code_1.c" und einem file "code_2.c" eine
function definiert mit dem gleichen Namen und in "code_2.h" bekannt
gegeben.

Nach Umbenennen einer der beiden functions compilierte gcc wieder ohne
die Fehlermeldung.

Viel Erfolg

Otto

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke guter Tip, kann den Fehler so auch nachstellen und beheben. Ist ja
dann wohl nen größerer Bug.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist eher kein "Bug".

Es ist eher ein Problem, dass die Linker Errors (doppeltes Symbol
gefunden) nicht an die IDE durchgereicht werden bzw. dass dem Linker
nachfolgende Tools trotz Linker Error aufgerufen werden.

Das ist eher eine Sache wie man das Makefile aufbaut.

Autor: Matthias Jung (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Danke erst mal für die vielen Verbesserungsvorschläge. Bekomme mein
Programmm trotzdem nicht zum laufen. Wie gesagt compellieren lässt es
sich problemlos. Das Problem mit gleich benamten Funktionen ist es bei
mir wohl nicht. Ich muss dazu dagen, dass ich Neueinsteiger was Atmels
betrifft bin. Ich hab mal mein Programm angehängt.

Autor: Matthias Jung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab das Problem weiter eingrenzen können. Mein Programm besteht aus
mehreren Programmen. Wenn ich die anderen Dateien nicht einbinde mit:
  #include<"Usart_init.c">
  #include<"put_s.c">
sondern einfach gar nicht, dann funktioniert es. Beim debuggen sieht
man dass er trotzdem ganz brav in die verschiedenen Dateien springt.
Muss man die Dateien nicht einbinden, oder mach ich es einfach falsch?

Autor: Marco S (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne eigentlich nur

#include <xy.h>

für die systemdateien oder

#include "myconfig.h"

für meine eigenen Include-Dateien. Vielleicht liegts daran.

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daß 'make' weiterläuft, obwohl ein Fehler in einem Target aufgetreten
ist, könnte daran liegen, daß 'make' mit dem Parameter '-k'
aufgerufen wird...

Prüft das mal in euren Einstellungen zum make-Aufruf.

Autor: Matthias Jung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Klartext, heißt das?: Die Programme, die von zB Main aufgerufen
werden nicht im Main Programm einbinden brauche. Hab ich das richtig
verstanden?

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du die *.c Dateien mit #include einbindest wird der Dateiinhalt an
dieser Stelle eingefügt. Wenn dann die betreffende Datei nochmal
compiliert und gelinkt wird, dann ist der Funktionsname auf einmal
doppelt vorhanden. Kann also der o.g. Linkerfehler sein.

Gruss

Autor: Matthias Jung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das leuchtet mir ein. Danke

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu dem Beitrag oben:
Normalerweise verwendet man dazu Header-Dateien, die nur einen
Funktionsprototyp enthalten. Sonst kann der Compiler die Funktion gar
nicht finden und meckert.
Der Inhalt der Datei put_s.h wäre dann:
void put_s(char *s);

und in main.c oder anderswo, wo die Fkt. put_s() verwendet wird:
#include "put_s.h"

Autor: Matthias Jung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das heißt, in der put_s,h steht dann nur:
   void put_s(char *s);
Die Datei put_s.c brauch ich dann weiterhin, nur dass die put_s.h zB in
main eingebunden wird, wie du oben beschrieben hast.

Du sagst, eigentlich, verursache ich wenn ichs nicht mache ernsthafte
Probleme? Durch den Compiler gings ja durch.

Autor: Dirk Dörr (dirkd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht solltest Du erst einmal C-Programmierung auf einem PC lernen
ehe Du mit µC anfängst.

Nicht nur Deine includes sind falsch.

Dein Programm wird auch nicht 123 ausgeben, falls Du das erwarten
sollst. Dein put_s erwartet einen Zeiger auf Character und keinen
char-Wert.

Autor: Matthias Jung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da magst du Recht haben. Ich habe jedoch schon C Programme programmiert,
allerdings sind meine Kenntnisse schon ziemlich eingrostet.

Einen Text zu senden würde ich hinbekommen:

char text[] = "BlaBla";
int main()
{
    Usart_init();
    put_s (text);
}
müsste ja dann funktionieren.

Allerdings will ich einen 4 stelligen Zahlenwert, der sich auch ändert
senden.
Kannst du mir da einen Tipp geben? Wär dir sehr dankbar.

Autor: Dirk Dörr (dirkd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau Dir die zur Verfügung stehenden Bibliotheken an. In diesem Fall
die avr-libc.

itoa ist die Funktion, die Du suchst. Oder sprintf falls das zur
Verfügung steht.

Autor: Matthias Jung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank, dass habe ich gesucht.

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.