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)
> #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
Ja ich habs auch mit "" stehen, also #include "sseg.h" Hab ich hier nicht richtig gepostet duck
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.
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?
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??
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.
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.
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!
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.
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...:(
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.