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


von Sören (Gast)


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 ==========

von Boe Bachter (Gast)


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)


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)


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)


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)


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)


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)


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:

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)


Lesenswert?

Schlangenöl hat halt immer Nebenwirkungen...

Oliver

von Assurbanipal (Gast)


Lesenswert?

Bei mir lag es daran, dass das Projekt auf einem NAS-Laufwerk liegt. Die 
NAS als Netzlaufwerk korrekt einzubinden hat geholfen

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.