Atmel Studio 7 Error: recipe for target 'main.o' failed

Gast #5061641
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:
1
------ Build started: Project: FS1.2, Configuration: Release AVR ------
2
Build started.
3
Project "FS1.2.cproj" (default targets):
4
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
5
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):
6
  Using "RunCompilerTask" task from assembly "C:\Program Files (x86)\Atmel\Studio\7.0\Extensions\Application\AvrGCC.dll".
7
  Task "RunCompilerTask"
8
    Shell Utils Path C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils
9
    C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils\make.exe all --jobs 2 --output-sync 
10
    Building file: .././main.c
11
    Invoking: AVR/GNU C Compiler : 4.9.2
12
    "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" 
13
D:\Projekte\FS1.2\Release\Makefile(156,1): error: recipe for target 'main.o' failed
14
    .././main.c: In function 'main':
15
D:\Projekte\FS1.2\main.c(463,3): warning: implicit declaration of function 'clock_prescale_set' [-Wimplicit-function-declaration]
16
       clock_prescale_set(clock_div_2);
17
       ^
18
D:\Projekte\FS1.2\main.c(463,22): error: 'clock_div_2' undeclared (first use in this function)
19
       clock_prescale_set(clock_div_2);
20
                          ^
21
D:\Projekte\FS1.2\main.c(463,22): info: each undeclared identifier is reported only once for each function it appears in
22
D:\Projekte\FS1.2\main.c(477,22): error: 'clock_div_1' undeclared (first use in this function)
23
       clock_prescale_set(clock_div_1);
24
                          ^
25
D:\Projekte\FS1.2\main.c(173,7): warning: variable 'fReqAck' set but not used [-Wunused-but-set-variable]
26
      bool fReqAck = true;
27
           ^
28
    make: *** [main.o] Error 1
29
    make: *** Waiting for unfinished jobs....
30
    Building file: .././com.c
31
    Invoking: AVR/GNU C Compiler : 4.9.2
32
    "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" 
33
    Finished building: .././com.c
34
  Done executing task "RunCompilerTask" -- FAILED.
35
Done building target "CoreBuild" in project "FS1.2.cproj" -- FAILED.
36
Done building project "FS1.2.cproj" -- FAILED.
37

38
Build FAILED.
39
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========
Gast #5061715
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.
#5061732
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.
Gast #5061753
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.
Gast #6209548
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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren