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
Du musst einfach die uart.o bei den Objects eintragen:
> OBJ = main.o uart.o
> #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.
@ 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!
:
Bearbeitet durch User
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.
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.