"undefined reference to" mit Makefile

Gast #875273
Lesenswert?
• ▲
▼
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
Gast #875286
Lesenswert?
• ▲
▼
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
Gast #875303
Lesenswert?
• ▲
▼
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
Gast #875356
Lesenswert?
• ▲
▼
# 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
Gast #875435
Lesenswert?
• ▲
▼
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
Gast #875485
Lesenswert?
• ▲
▼
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?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.