Forum: Compiler & IDEs Avr-gcc will nicht mit include-Dateien


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Heiko B. (heiko_b)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

von Thomas M. (thomil)


Bewertung
1 lesenswert
nicht lesenswert
Du musst einfach die uart.o bei den Objects eintragen:

> OBJ            = main.o uart.o

von --- (Gast)


Bewertung
0 lesenswert
nicht 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.

von Heiko B. (heiko_b)


Bewertung
0 lesenswert
nicht 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!

: Bearbeitet durch User
von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
1 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.