Avr-gcc will nicht mit include-Dateien

#5146048
Lesenswert?

Guten Morgen
Bislang habe ich mit der AVR-Toolchain gearbeitet. Auf Win 8.1 läuft die 
ja leider nicht mehr. Darum habe ich mich umgesehen und "Prebuilt GNU 
toolchain for avr" von "http://gnutoolchains.com/avr/"; installiert.
Das ergibt avr-gcc5.3.0.exe

Die beigefügten Beispiele kann ich ohne Fehlermeldungen compilieren. Am 
Ende steht eine .hex-Datei im Verzeichnis.

Folgendes Programm kann ich nicht übersetzten

#include <avr/io.h>
#include "uart.h" //<-Das ist die Library von Peter Fleury

int main (void)
{
uart_putc(0x00);
    return (0);
}

uart.c und uart.h liegen im gleichen Verzeichnis wie main.c
Das Makefile ist von den Beispielen kopiert und nur leicht angepaßt. 
(PRG, OBJ, Target und weiter unten
dependency:
main.o: uart.h uart.c

Ich bekomme dann die berühmte Fehlermeldung:

> "make" all
avr-gcc -g -Wall -O2 -mmcu=atmega16    -c -o main.o main.c
avr-gcc -g -Wall -O2 -mmcu=atmega16  -Wl,-Map,main.map -o main.elf 
main.o
main.o: In function `main':
C:\Heiko\C\Minitest/main.c:8: undefined reference to `uart_putc'
collect2.exe: error: ld returned 1 exit status
"make": *** [main.elf] Error 1

> Process Exit Code: 2

Im Verzeichnis existieren anschließend zusätzlich nur die main.o und 
main.map

Eine uart.o fehlt

Aber warum?
Das Makefile befindet sich im Anhang

Es ist bestimmt nur eine Kleinigkeit :-) Ich war bislang immer ganz 
froh, dass es klaglos funktioniert hat und ich nicht in die Untiefen der 
Toolchain eintauchen musste.
Bei meinen alten Makefiles gab es immer die Variable SRC mit den 
entsprechenden Einträgen. Hier nur die dependency. Ich vermute der 
Fehler kommt aus der Ecke, aber die alten Makefiles wollen auch nicht.

Vielleich kann mir ja jemand das Brett vom Kopf nehmen, oder es ergibt 
sich ein Anhaltspunkt, an dem ich weiterforschen kann.

Noch einen schönen Sonntag
Heiko
Angehängte Dateien:
Gast #5146056
Lesenswert?

> #include "uart.h" //<-Das ist die Library von Peter Fleury

Bei Antuino womöglich.
Das ist ein Header- aka Includefile.

Und: Das wird auch nicht gelinkt. Gelinkt wird main.o und uart.o.


> ich nicht in die Untiefen der Toolchain eintauchen musste

Wer den elementaren Umgang mit Compiler, Preprozessor und Linker
geistig ignorieren will, sollte sich einem Haekelkreis anschliessen.
#5146087
Lesenswert?

@ Thomas Miletich:
Hurra! Das wars. Es ist so wie ich dachte. Man sieht den Wald vor lauter 
Bäumen nicht :-) Ich war sicher, hätte es ausprobiert. -Egal-
Endlich bekomme ich andere Fehlermeldungen ...
Liegt aber daran, daß die Library noch SIGNAL benutzt, aber das ist 
Fleißarbeit.

Also: Danke!
Persönliche Seite #5146198
Lesenswert?

Heiko B. schrieb:
> Liegt aber daran, daß die Library ...

Es ist keine. Du verwendest keine Library. Du verwendest einfach nur 
ein zweites Sourcefile mit zugehörigem Headerfile.

Nenn' so etwas nicht Library.

Eine Library ist eine Sammlung von bereits compiliertem Code, der bei 
gcc & Co. in einer *.a-Datei zu finden ist (deren Name obendrein mit 
"lib" anfängt).

Wenn Du eine Datei namens "libuart.a" verwenden würdest, dann würdest 
Du eine Library verwenden.

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