PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Linkerfehler beim Makefile



fluxy
20.01.2005, 21:38
Hallo. Ich habe mal versucht für meine Projekte ein Basismakefile aufzubauen, ich will das Makefile aus dem sample-ordner nicht verwenden sondern mein eigenes. Leider klappt das nicht so wie ich es erwartet habe. Aus dem vorgefertigten Makefile habe ich entnommen, dass ich zunächst das .o aus dem .c erstelle und dann aus dem .o ein .elf. Leider klappt dieser zweite schritt bei mir schon nicht.

Hier meine Ausgaben:

vr-gcc -g -Os -Wall -Wstrict-prototypes -Wa,-ahlms=main.lst main.c -o main.o
main.c:7:2: warning: no newline at end of file
avr-gcc -W1,-Map=main.map,--cref -mmcu=at90s8535 main.o -o main.elf
main.o(.text+0x50): In function `__vector_10':
: multiple definition of `__bad_interrupt'
C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/lib/crts8535.o(.text+0x0): first defined here
main.o(.text+0x0): In function `__vector_default':
: multiple definition of `__vectors'
C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/lib/crts8535.o(.vectors+0x0): first defined here
make.exe: *** [main.elf] Error 1


---------------------------------------------------------------------------------
Ich weiss nicht ob es was bringt wenn ich mein Makefile poste. Es ist noch nicht so superlang, deshalb kann ich es mal posten:

MCU = at90s8535
FORMAT = ihex
LANGUAGE = -std=gnu99
TARGET = main

LIB =
INC =

CC = avr-gcc
FLAGS = -g -Os -Wall -Wstrict-prototypes -Wa,-ahlms=$(<:.c=.lst)
LINKERFLAGS = -W1,-Map=$(TARGET).map,--cref -mmcu=$(MCU)
ISP_DIR = C:/Programme/PonyProg2000/PONYPROG2000.EXE

OBJ = $(TARGET).o
ELF = $(TARGET).elf
OUT = $(TARGET).out


all: $(OBJ) $(ELF)

clean:
rm -f *.o
rm -f *.out
rm -f *.lst
rm -f *.elf
rm -f *.map

$(ELF): $(OBJ)
$(CC) $(LINKERFLAGS) $(OBJ) $(LIB) -o $@

main.o: main.c
$(CC) $(FLAGS) main.c -o $@
------------------------------------------------------------------------------------

Hoffentlich könnt ihr mir weiterhelfen....

bluebrother
21.01.2005, 11:19
Da steht es:

main.o(.text+0x50): In function `__vector_10':
: multiple definition of `__bad_interrupt'
irgendwo ist __bad_interrupt mehrfach definiert. Liegt also irgendwo im Code.

Btw, warum willst du das vorhandene Makefile nicht benutzen? Die sind i.A. ziemlich gut ...

Matthias W.
22.01.2005, 10:55
Hi

beim bauen des Objects wird kein -mmcu=... angegeben. Das ist nicht gut. Füge deiner FLAGS-Variable mal -mmcu=$(MCU) hinzu.

Matthias