.elf datei not found

Gast #4609673
Lesenswert?

Hallo zusammen.

Wen ich in C programmiere (Studio 4) bekomme ich beim Compalieren 
folgende Fehlermeldungen:

avr-opjcopy: 'test.elf' no such file.

normalerweise müsste diese Datei doch vom Compiler erzeugt werden.
fehlt da vielleicht etwas im makefile?
Im Makefile steht: TARGET = test.elf


Win XP, AVR Studio4 + WinAVR.
(Firma: Vescomp) #4609781
Lesenswert?

haderlump schrieb:
> normalerweise müsste diese Datei doch vom Compiler erzeugt werden.
> fehlt da vielleicht etwas im makefile?

 Im AvrStudio Project/Configuration Options/Custom Options öffnen,
 in External Tools "Use AVR Toolchain" auschecken.
 Path zu avr-gcc und make eintragen, normalerweise in:
 "WinAVR\bin\avr-gcc.exe" und
 "WinAVR\utils\bin\make.exe"
Gast #4610525
Lesenswert?

So, nun bin ich ein Stück weiter.
Ich hatte zu Testzwecken nur eine leere main Funktion, und sonst garnix. 
Kein Inhalt, keie elf-Datei.

Nun habe ich das  1. Testprogramm aus dem Tutorial verwendet.
Nun gibt es eine andere Fehlermeldung:

Build started 12.6.2016 at 06:11:56
make: *** No rule to make target `../test.c', needed by `test.o'.  Stop.
Build failed with 1 errors and 0 warnings...

Das Make-File hat folgenden Inhalt.

######################################################################## 
#######
# Makefile for the project test
######################################################################## 
#######

## General Flags
PROJECT = test
MCU = atmega168
TARGET = test.elf
CC =

CPP = avr-g++

## Options common to compile, link and assembly rules
COMMON = -mmcu=$(MCU)

## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char 
-funsigned-bitfields -fpack-struct -fshort-enums
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d

## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += $(CFLAGS)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2

## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS +=  -Wl,-Map=test.map


## Intel Hex file production flags
HEX_FLASH_FLAGS = -R .eeprom -R .fuse -R .lock -R .signature

HEX_EEPROM_FLAGS = -j .eeprom
HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings


## Objects that must be built in order to link
OBJECTS = test.o

## Objects explicitly added by the user
LINKONLYOBJECTS =

## Build
all: $(TARGET) test.hex test.eep test.lss## Compile
test.o: ../test.c
  $(CC) $(INCLUDES) $(CFLAGS) -c  $<

##Link
$(TARGET): $(OBJECTS)
   $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o 
$(TARGET)

%.hex: $(TARGET)
  avr-objcopy -O ihex $(HEX_FLASH_FLAGS)  $< $@

%.eep: $(TARGET)
  -avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0

%.lss: $(TARGET)
  avr-objdump -h -S $< > $@

## Clean target
.PHONY: clean
clean:
  -rm -rf $(OBJECTS) test.elf dep/* test.hex test.eep test.lss test.map


## Other dependencies
-include $(shell mkdir dep 2>NUL) $(wildcard dep/*)


Da steht sehr viel., was ich als Anfänger nicht verstehe.
Diese Makefile wurde wohl bei den Programminstalationen von Studio4 bzw. 
WinAVR automatisch erzeugt. Stammt also nicht von mir. Und ich werde 
mich hüten, hier eigenmächtig etwas zu ändern
Gast #4610529
Lesenswert?

Das bedeutet für gewöhnlich, dass die Datei test.c nicht vorhanden oder 
nicht im richtigen Verzeichnis vorhanden ist.

Normalerweise erzeugt AVRStudio das makefile schon ganz richtig und legt 
auch die C-Dateien in den den richtigen Verzeichnissen an.

Hast Du evtl. am AVRStudio vorbei mit einem Editor gearbeitet? Oder 
nachträglich etwas verändert? Hast Du das Projekt völlig neu angelegt? 
Oder Dein altes weiterverwendet?
Es kann schon sein, dass man als Anfänger da ein wenig zu viel am 
AVRStudio vorbei "herumfummelt". Falls das so ist, lass das erstmal. 
Einfach nur geradeaus, so wie es in den Help-Files steht, arbeiten.

Ich schlage vor, dass Du test.c irgendwoanders hin kopierst und dann das 
komplette Projekt-Verzeichnis löschst. Dann legst Du ein neues Projekt 
an. Füge in AVRStudio den Inhalt des wegkopierten test.c mit copy und 
paste ein.
Alternativ schaue einmal, wo das neue c-File sich aufhält und kopiere 
die wegkopierte Datei dorthin.
Gast #4610531
Lesenswert?

Danke für dieAntwort.
Ich habe nun das Testverzeichnis gelöscht, und von vorne angefangen.

Jetzt gibt es eine neue Fehlermeldung:

Build started 12.6.2016 at 06:45:24
mmcu=atmega168 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char 
-funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT test2.o -MF 
dep/test2.o.d  -c  ../test2.c
/usr/bin/sh: -Wall: command not found
make: [test2.o] Error 127 (ignored)
mmcu=atmega168 -Wl,-Map=test2.map test2.o     -o test2.elf
/usr/bin/sh: -Wl,-Map=test2.map: command not found
make: [test2.elf] Error 127 (ignored)
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature 
test2.elf test2.hex
avr-objcopy: 'test2.elf': No such file
make: *** [test2.hex] Error 1
Build failed with 1 errors and 0 warnings...
Gast #4610534
Lesenswert?

Es ist mir erst garnicht aufgefallen, aber in Deinem ersten makefile war 
zu sehen, dass die Variable CC nicht gesetzt ist. Kannst ja mal 
nachschauen ob das in dem neuen make-file auch so ist.

Kann es sein, dass Du den WinAVR in AVRStudio nicht eingerichtet hast? 
Schaue mal in den Projekteinstellungen ob die Pfade für den WinAVR und 
make richtig eingestellt sind.
Falls die fehlen, setze sie richtig.

Das kann passieren, wenn man erst das AVRStudio installiert hat und dann 
erst WinAVR. Es kann auch sein, dass Du das jedesmal bei einem neuen 
Projekt machen musst. Abhilfe wäre, AVRStudio und WinAVR neu zu 
installieren und in der richtigen Reihenfolge.

Aber zunächst einmal einfach in den Projekteinstellungen nachschauen.

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