Forum: Compiler & IDEs Atmel Studio 7 Error: recipe for target 'main.o' failed


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 Sören (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

jetzt habe ich endlich Atmel Studio 7 auf Windows 10 installiert und 
wollte ein Projekt, das zuvor unter Windows 7 problemlos durch den 
Compiler lief (auch Atmel Studio 7), neu compilieren. Das sollte der 
Probelauf mit einer bekannten und funktionierenden Software sein, um 
diese dann von hier aus weiter zu entwickeln.

Es wurde mit dem Wizard ein neues Projekt erstellt, die Source-Files 
hineinkopiert und dem Projekt hinzugefügt, außerdem F_CPU definiert.
Wenn ich in main.c die Include-Dateien anklicke, z.B. power.h, wird in 
der Zeile oben der Pfad zu dieser Datei angezeigt. Sie wird also von der 
IDE gefunden.

Wenn ich dann compiliere, bekomme ich den Fehler "recipe for target 
'main.o' failed". Es werden tatsächlich einige Definitionen aus der 
erwähnten Datei power.h nicht gefunden. Diese Include-Datei scheint aber 
gefunden zu werden, sonst würde das doch sicher bemängelt.

Ich habe trotzdem versucht, den Include-Pfad an verschiedener Stelle 
anzugeben - ohne Erfolg.
Das Atmel Studio als Admin auszuführen hat auch nicht geholfen.

Deshalb die Bitte, dass von Euch jemand drauf schaut und mir einen Tip 
geben kann. Vielleicht ist es nur eine Einstellung im Atmel Studio?

Vielen Dank!
Gruß
Sören


Hier nocht die Ausgabe des Compilers:
------ Build started: Project: FS1.2, Configuration: Release AVR ------
Build started.
Project "FS1.2.cproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Compiler.targets" from project "D:\Projekte\FS1.2\FS1.2.cproj" (target "Build" depends on it):
  Using "RunCompilerTask" task from assembly "C:\Program Files (x86)\Atmel\Studio\7.0\Extensions\Application\AvrGCC.dll".
  Task "RunCompilerTask"
    Shell Utils Path C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils
    C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils\make.exe all --jobs 2 --output-sync 
    Building file: .././main.c
    Invoking: AVR/GNU C Compiler : 4.9.2
    "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe"  -x c -funsigned-char -funsigned-bitfields -DNDEBUG -DF_CPU=8000000UL  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include"  -Os -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -mmcu=atmega88pa -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega88pa" -c -std=gnu99 -MD -MP -MF "main.d" -MT"main.d" -MT"main.o"   -o "main.o" ".././main.c" 
D:\Projekte\FS1.2\Release\Makefile(156,1): error: recipe for target 'main.o' failed
    .././main.c: In function 'main':
D:\Projekte\FS1.2\main.c(463,3): warning: implicit declaration of function 'clock_prescale_set' [-Wimplicit-function-declaration]
       clock_prescale_set(clock_div_2);
       ^
D:\Projekte\FS1.2\main.c(463,22): error: 'clock_div_2' undeclared (first use in this function)
       clock_prescale_set(clock_div_2);
                          ^
D:\Projekte\FS1.2\main.c(463,22): info: each undeclared identifier is reported only once for each function it appears in
D:\Projekte\FS1.2\main.c(477,22): error: 'clock_div_1' undeclared (first use in this function)
       clock_prescale_set(clock_div_1);
                          ^
D:\Projekte\FS1.2\main.c(173,7): warning: variable 'fReqAck' set but not used [-Wunused-but-set-variable]
      bool fReqAck = true;
           ^
    make: *** [main.o] Error 1
    make: *** Waiting for unfinished jobs....
    Building file: .././com.c
    Invoking: AVR/GNU C Compiler : 4.9.2
    "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe"  -x c -funsigned-char -funsigned-bitfields -DNDEBUG -DF_CPU=8000000UL  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\include"  -Os -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -mmcu=atmega88pa -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.1.130\gcc\dev\atmega88pa" -c -std=gnu99 -MD -MP -MF "com.d" -MT"com.d" -MT"com.o"   -o "com.o" ".././com.c" 
    Finished building: .././com.c
  Done executing task "RunCompilerTask" -- FAILED.
Done building target "CoreBuild" in project "FS1.2.cproj" -- FAILED.
Done building project "FS1.2.cproj" -- FAILED.

Build FAILED.
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========

von Boe Bachter (Gast)


Bewertung
-4 lesenswert
nicht lesenswert
Sören schrieb:
> Es wurde mit dem Wizard ein neues Projekt erstellt,

Wer war das? Frage den der das getan hat. Der kann dir
sicher sagen was er gemacht und was er falsch gemacht hat.

von Sören (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Das hab' ich selbst gemacht:

GCC C Executable Project, Name und Verzeichnis + Controller-Typ

Mehr ist da auch nicht zu machen.

von Sören (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wenn eine Header-Datei eingebunden wird, die nicht existiert, gibt es 
die Fehlermeldung
error: avr/powerX.h: No such file or directory

Wenn power.h ganz auskommentiert ist, sind die Fehlermeldungen gleich 
wie oben beschrieben.

Im Pfad C:\Program Files 
(x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr 
findet sich power.h und enthält auch die reklamierten Definitionen.

Als Default-Include-Pfade sind angegeben:
C:\Program Files 
(x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include
C:\Program Files 
(x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\4.9 
.2\include
C:\Program Files 
(x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\4.9 
.2\include-fixed

Ich bin ratlos.

von Oberlajtnant (Gast)


Bewertung
4 lesenswert
nicht lesenswert
> Ich bin ratlos.

Das war ich auch. 2 Tage lang. Dann habe ich den Dreck runtergeworfen, 
denn ich wollte arbeiten -nicht Rätsel raten.

von M.K. B. (mkbit)


Bewertung
0 lesenswert
nicht lesenswert
Ich vermute es liegt an einem fehlenden define, sodass der entsprechende 
Code im Präprocessor ausgelassen wird.

Da ich den genauen Code nicht kenne und auch deine Version von power.h 
nicht, werde ich mal beschreiben, wie ich den Fehler gesucht habe.

1) Die Datei power.h wird nach deine Aussage inkludiert. Der Compiler 
beschwert sich nicht, dass er sie finden kann, also hat er die Datei 
gefunden.

2) "recipe for target 'main.o' failed" heißt, dass der Compiler aus 
irgendeinem Grund main.c nicht bauen konnte. Schaut man sich den ersten 
Fehler danach an "error: 'clock_div_2' undeclared", dann sieht man, dass 
der Compile clock_div_2 nicht kennt, es also nicht deklariert wurde.

3) Ich suche in der power.h nach clock_div_2 und finde es auch. Nachdem 
power.h aber inkludiert wurde, muss es also ein #ifdef sein, dass 
verhindert, dass der entsprechende Code beim Compilieren verwendet wird. 
Scrollt man dann ein bisschen weiter nach oben sieht man eine ganze 
Reihe von "#if defined(_AVR_AT90CAN32_)" ...

Der Fehler liegt vermutlich in dem fehlenden define für den 
Prozessortyp.
Wie das allerdings über den Wizard eingestellt werden kann, weiß nicht, 
weil ich nicht mit Atmegastudio arbeite.

von Sören (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Super! Danke, das war der entscheidende Tip!

Als Controller wurde der tatsächlich verwendete
  ATmega88PA
eingestellt.

Damit kommt es zu der oben beschriebenen Fehlermeldung.

Jetzt habe ich den Controller mal geändert auf
  ATmega88P

Und siehe da, der Fehler ist verschwunden.

Jetzt will ich ungern das Header-Filer power.h editieren
und meinen Controller hinzufügen.

Deshalb werde ich jetzt erst mal den ATmega88P eingestellt
lassen in der Annahme, dass er sich zum PA hin nicht unter-
scheidet.

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht lesenswert
Sören schrieb:
> Jetzt habe ich den Controller mal geändert auf
>   ATmega88P
>
> Und siehe da, der Fehler ist verschwunden.

Bugreport an den Hersteller senden. Klingt nach einem Copy&Paste Fehler, 
der schlicht übersehen wurde.

von Elko_123 (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich habe mich mit dem Fehler lange rumgeärgert, deshalb wollte ich meine 
Lösung beitragen, das obige hat bei mir leider nicht geholfen.
Im Anhang ist ein Bild mit allen Funktionen, die ich bei Bitdefender 
freigeben musste, um keine entsprechende Fehlermeldung zu erhalten 
(recipe for target 'main.o' failed). Der Virenschutz möchte hier den 
Ordner (C:\Users\admin\Documents\Atmel 
Studio\7.0\GccApplication9\GccApplication9\Debug) vor unerlaubten 
Zugriff schützen, bei Bitdefender gibt es mehrere Möglichkeiten, eine 
Ausnahme hinzuzufügen, dieser muss hier unter sichere Dateien eingefügt 
werden (siehe Anhang).

as.exe
avr-objcopy.exe
cc1.exe
ld.exe

Meine Bedingungen:

Windows 10 64bit

AtmelStudio 7 (Version: 7.0.2397)


Liebe Grüße und viel Erfolg

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
Schlangenöl hat halt immer Nebenwirkungen...

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]
  • [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.