Hallo Zusammen, ich fange grad mein erstes Projekt an. Allergins habe ich den bekannten linker Fehlermeldung "undefined reference to " bekommen. Ausschnitt: Linking: obj/main.elf avr-gcc -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-en ums -Wall -Wstrict-prototypes -Wa,-adhlns=obj/main.o -std=gnu99 -MMD -MP -MF .dep/main.elf.d obj/main.o obj/uart.o obj/ TWImaster.o --output obj/main.elf -Wl,-Map=obj/main.map,--cref -lm obj/main.o: In function `main': C:\work\MyRobo/main.c:22: undefined reference to `uart_init' C:\work\MyRobo/main.c:26: undefined reference to `uart_putc' make: *** [obj/main.elf] Error 1 obwohl ich glaube richtig zu machen, denn unter AVRstudio funktioniert Kompilieren und linken. Aber mit AVRDUDE nicht. Habe über 6Stunden für diese Sache eingesetzt, jetzt brauche ich Hilfe. Ich vermute dass ich in Makefile was falsch mache, aber was ;-) Grüße und dank im voraus Khan
Wenn deine Source aus main.c, uart.c, und TWImaster.c bestehen, und diese alle im selben Verzeichnis liegen, dann sollte folgendes im makefile stehen: # Target file name (without extension). TARGET = main # Object files directory # To put object files in current directory, use a dot (.), do NOT make # this an empty or blank macro! OBJDIR = . # List C source files here. (C dependencies are automatically generated.) SRC = $(TARGET).c uart.c TWIMaster.c Oliver
Vielendank, für so schnelle Antwort! ;-) ich möchte ein OBJ Verzeichnis haben, damit ich überblich habe und gewisse Verzeichnisstruktur. wie kann ich dem Makefile beibringen dass er die *.o Dateien in OBJ suchen soll? grüße Khan
# Object files directory # To put object files in current directory, use a dot (.), do NOT make # this an empty or blank macro! OBJDIR = ./obj Wobei das alles bei dir ja zu funktionieren scheint, sonst gäbe es eine "file not found" - Meldung. Der Fehler liegt woanders. Zip doch mal alle Dateien (Sourcen und makefile) zusammen, und stell die hier ein. Oliver
Ok mache ich, habe noch ein weinig Ordnung(Verzeichnisstrucktur) gebracht.
uart.c hat aber ziemlich wenig Inhalt :-) Da sind dir wohl Dateien durcheinandergekommen. Oliver
oh so ein miss geschick ;-) sorry. hier das richtige Datei
Compiling C: main.c avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=../obj/main.lst -I../inc -std=c99 -MMD -MP -MF .dep/main.o.d main.c -o ../obj/main.o In file included from main.c:5: c:/winavr-20071221/bin/../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>." main.c: In function 'main': main.c:22: warning: implicit declaration of function 'uart_init' main.c:26: warning: implicit declaration of function 'uart_putc' Compiling C: uart.c avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=../obj/uart.lst -I../inc -std=c99 -MMD -MP -MF .dep/uart.o.d uart.c -o ../obj/uart.o uart.c: In function 'uart_init': uart.c:18: warning: integer overflow in expression Compiling C: TWImaster.c avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=../obj/TWImaster.lst -I../inc -std=c99 -MMD -MP -MF .dep/TWImaster.o.d TWImaster.c -o ../obj/TWImaster.o TWImaster.c: In function 'i2c_Start': TWImaster.c:73: warning: control reaches end of non-void function Linking: ../obj/main.elf avr-gcc -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=../obj/main.o -I../inc -std=c99 -MMD -MP -MF .dep/main.elf.d ../obj/main.o ../obj/uart.o ../obj/TWImaster.o --output ../obj/main.elf -Wl,-Map=../obj/main.map,--cref -lm ../obj/main.o: In function `main': C:\Dokumente und Einstellungen\Schulzo\Desktop\ttt/main.c:26: undefined reference to `uart_putc' make.exe: *** [../obj/main.elf] Error 1 > Process Exit Code: 2 > Time Taken: 00:01 Fazit: In uart.c fehlt immer noch uart_putc(), und uart.h ist auch leer. Dein o.a. Fehler >C:\work\MyRobo/main.c:22: undefined reference to `uart_init' kommt nicht, das ist auch richtig so. Oliver
also dass ist mir ein RIESEN Rätsel!!! ich obwohl ich die ganze Nacht programmiert habe sind sie nicht da! Du hast vollkommen recht! Echt komisch! Muss wohl aus versehen in ein anderes Pfad gelandet sein! So ein blöder Fehler!!! Wie kann den so was passieren?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.