Forum: Compiler & IDEs gcc plug-in: Error: Object file not found on expected locati


von Dirk (Gast)


Lesenswert?

wenn ich eine selbstgeschriebene .h Datei mit einbinde
(#include sseg.h) dann bekomme ich fogenden Fehler:

gcc plug-in: Error: Object file not found on expected location [..].elf

Wenn ich das include raus nehme, bekomme ich nur noch Warning: implicit 
declaration of function x (is ja klar).

Das Programm läuft zwar aber eigentlich würde ich die Warning gerne 
nicht haben. ->also includen

Diese Angaben reichen wahrscheinlich noch nicht aus um mir zu Helfen ich 
kann mir jetzt allerdings gar nicht vorstellen was ihr noch so brauchen 
würdet, würde mich also freuen wenn jetzt ne antwort kommt ;)

oder ihr erstmal sagt wir brauchen dafür 1. 2. 3.

Ich hab das Problem übrigens öfters (nicht nur mit der sseg.h)

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> #include sseg.h

Da fehlen doppelte Anführungsstriche " oder spitze Klammern <> um das 
sseg.h. So wird die Includedatei nicht gefunden und deshalb auch keine 
Objektdatei produziert. Das kann zur beschriebenen Fehlermeldung führen.

Eigentlich sollte aber schon vorher eine Fehlermeldung auftauchen, in 
der der Fehler beim Includieren gemeldet wird.

Ansonsten...
Beitrag "gcc plug-in: Error: Object file not found on expected ...."
Beitrag "gcc plug-in: Error: Object file not found on expected locati"
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=332828

von Dirk (Gast)


Lesenswert?

Ja ich habs auch mit "" stehen,
also #include "sseg.h"

Hab ich hier nicht richtig gepostet duck

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Guck dir trotzdem mal die Fehlermeldungen an.  AVR Studio wertet den
Rückkehrcode vom "make" nicht ordentlich aus, sondern versucht
stattdessen, alle Fehlermeldungen zu parsen.  Damit findet es natürlich
nur ,,erwartete'' Fehler, bei unerwarteten stolpert es erst dann, wenn
doch seiner Meinung nach der Build-Prozess gut gelaufen ist, am Ende
aber dann gar keine Objektdatei rausgekommen ist.

von Dirk (Gast)


Lesenswert?

Jo, so ein Fall is es bei mir.

Ok ich habe herausgefunden woran es liegt..

Ich definiere bzw. deklariere in der sseg.h einige konstanten (const 
uint8_t) und eine globale Variable..

Damit kommt er wohl nicht zurecht..:
multiple definition of sseg_charset

Darf man in der .h so was gar nicht machen?
Muss ich das in der .c machen? oder gibts da noch andere Orte?

von Dirk (Gast)


Lesenswert?

ich wollte noch hinzufügen, dass ich die sseg.h mit
#ifndef sseg_h
#define sseg_h
beginne und mit #endif schließe

in so fern wundert es mich das er versucht das ganze mutliple zu 
definieren, darf/ kann er doch eigentlich nur einmal oder wieso nicht??

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Also im Prinzip das gleiche Grundproblem wie im Link #2 oben
Beitrag "gcc plug-in: Error: Object file not found on expected locati"

Steht bei der Fehlermeldung "multiple definition of sseg_charset" keine 
Zeilennummer oder Name einer Quelldatei dabei? Einen besseren 
Schussinsblaue kann ich auch nicht abgeben - es fehlt halt der 
Quellcode.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Du darfst in Headerdateien nur deklarieren, nicht aber definieren.
(*)  Also das hier ist OK:
1
extern uint8_t someglobalvar;
2
extern uint8_t dosomething(void);
3
uint8_t dosomethingelse(void);

Bei Funktionen ist das "extern" optional in der Deklaration, der
Compiler kann an Hand des abschließenden Semikolons stets eine
Deklaration von einer Definition unterscheiden.

Das hier ist falsch, da es sich um eine Definition handelt:
1
uint8_t someglobalvar;

(*) Keine Regel ohne Ausnahme: Eine Funktionsdefinition mit "static
inline" ist auch im Headerfile OK.  Eine solche Funktion hat als nur
Sinn, wenn sie vor der ersten Benutzung nicht nur deklariert, sondern
auch definiert worden ist, da der Compiler ja explizit angewiesen
wird, den zugehörigen Assemblercode an Ort und Stelle sofort zu
generieren.

von Timo P (Gast)


Lesenswert?

Hallo!
Ich habe ein spezielles extern probelem:

main.c:  volatile char buffer[BUFFER_SIZE];

uart.c:  extern volatile char buffer[BUFFER_SIZE];

Fehler: gcc plug-in: Error: Object file not found on expected locati

Warum? Evtl. weil das #define für BUFFER_SIZE in einer main.h ist? Diese 
includiere ich doch in beiden .c-Modulen.

Ich weiß keinen Rat mehr! Danke für Hilfe!

von Karl H. (kbuchegg)


Lesenswert?

Timo P schrieb:

> Warum? Evtl. weil das #define für BUFFER_SIZE in einer main.h ist? Diese
> includiere ich doch in beiden .c-Modulen.

Schön für dich.
Aber denk immer drann: Wir können deinen Code nicht sehen

> Ich weiß keinen Rat mehr! Danke für Hilfe!

Für dich gilt dasselbe:
Geh ins Output Fenster (dort wo die Compiler Statusmeldungen 
durchlaufen) und scroll nach oben, ob es einen Fehler vom 
Compiler/Linker gab.

von Timo P (Gast)


Lesenswert?

nein, lezte meldung war:

Loaded partfile: C:\Programme\Atmel\AVR 
Tools\PartDescriptionFiles\ATmega16.xml

danach der Fehler!

Wenn ich die Codes wieder in ein einziges modul packe, läuft alles 
wieder. GRRR

ich denke das einfachste ist wohl, wenn ich kein define für die 
buffer-size nutze, sondern es statisch angebe. wohlgemerkt an zwei 
stellen...:(

von Karl H. (kbuchegg)


Lesenswert?

Timo P schrieb:
> nein, lezte meldung war:
>
> Loaded partfile: C:\Programme\Atmel\AVR
> Tools\PartDescriptionFiles\ATmega16.xml
>
> danach der Fehler!

Das kann nicht sein.
Da fehlt mindestens der Compileraufruf, da fehlt mindestens die 
Compiler-Fertig Meldung, da fehlt ....

> ich denke das einfachste ist wohl, wenn ich kein define für die
> buffer-size nutze, sondern es statisch angebe. wohlgemerkt an zwei
> stellen...:(

Kannst du natürlich machen.
Du kannst aber auch den Code einfach mal herzeigen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Timo P schrieb:

> Fehler: gcc plug-in: Error: Object file not found on expected locati

Update dein AVR Studio bitte auf eine halbwegs aktuelle Version, die
den exit-Status von "make" ordentlich auswertet, statt sich auf das
Parsen von Textmustern für Fehlermeldungen zu verlassen.

Bitte kapere keine alten Threads für dich.

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.