www.mikrocontroller.net

Forum: Compiler & IDEs avr-gcc mit eclipse wirft mit Fehlern nach mir


Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich bin recht neu im µC Bereich, habe mir nach dem aktuellen Tutorial 
auch mein Eclipse mit dem AVr Plugin eingerichtet, passt auch alles 
soweit.

Wenn ich jetzt allerdings Peter Fleurys Library Kompillieren will, incl 
dem Beispiel bekomme ich folgenden Fehler:

**** Build of configuration Debug for project SCAR ****

make all
Building file: ../main.c
Invoking: AVR Compiler
avr-gcc -Wall -g2 -gstabs -O0 -fpack-struct -fshort-enums 
-funsigned-char -funsigned-bitfields -mmcu=atmega16 -DF_CPU=16000000UL 
-MMD -MP -MF"main.d" -MT"main.d" -c -o"main.o" "../main.c"
Finished building: ../main.c

Building file: ../uart.c
Invoking: AVR Compiler
avr-gcc -Wall -g2 -gstabs -O0 -fpack-struct -fshort-enums 
-funsigned-char -funsigned-bitfields -mmcu=atmega16 -DF_CPU=16000000UL 
-MMD -MP -MF"uart.d" -MT"uart.d" -c -o"uart.o" "../uart.c"
Finished building: ../uart.c

Building target: SCAR.elf
Invoking: AVR C Linker
avr-gcc -Wl,-Map,SCAR.map -mmcu=atmega16 -o"SCAR.elf"  ./main.o ./uart.o
./uart.o: In function `__vector_11':
../uart.c:248: multiple definition of `__vector_11'
./main.o:../uart.c:248: first defined here
./uart.o: In function `__vector_12':
../uart.c:291: multiple definition of `__vector_12'
./main.o:../uart.c:291: first defined here
./uart.o: In function `uart_init':
../uart.c:315: multiple definition of `uart_init'
./main.o:../uart.c:315: first defined here
./uart.o: In function `uart_getc':
../uart.c:393: multiple definition of `uart_getc'
./main.o:../uart.c:393: first defined here
./uart.o: In function `uart_putc':
../uart.c:421: multiple definition of `uart_putc'
./main.o:../uart.c:421: first defined here
./uart.o: In function `uart_puts':
../uart.c:447: multiple definition of `uart_puts'
./main.o:../uart.c:447: first defined here
./uart.o: In function `uart_puts_p':
../uart.c:461: multiple definition of `uart_puts_p'
./main.o:../uart.c:461: first defined here
make: *** [SCAR.elf] Fehler 1

Ich habe jeweils nur eine uart.c, uart.h, main.c (die ehemals 
test_usrt.h hieß).
Was spielt da verrückt?

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich nicht drin!

Zumindest wüsste ich nicht, wo eine zweite definition beim kopieren des 
Quelltextes herkommen sollte.

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, ich weiß nun wieso, bzw kanns mir vorstellen!

Eclipse kompilliert alle Dateien und linkt sie dann.

Ich habe mit meinen drei Befehlen nicht gelinkt, sondern direkt 
eingebunden.

Könnte das die Lösung sein?

Wenn ja, dann habe ich einen #include in eclipse zu viel drinne, weil 
das ding dann included wird UND nochmal versucht zu linken.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann es sein das du irgendwelche *.c dateien per include einbindest?

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das war der Fall, als ich manuell kompilliert habe.

Die UART Library besteht aus 3 Dateien: uart.h, uart.c und test_uart.c. 
in die test_uart.c habe ich die uart.c zusätzlich zur uart.h 
eingebunden. Das hat dann in der IDE zu Fehlern geführt.

Nun habe ich das Include rausgenommen und es wird perfekt gelinkt.


Danke :)

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jan schrieb:
> Ja, das war der Fall, als ich manuell kompilliert habe.

das liegt aber nicht an der IDE, sondern daran das man NIE c Datein per 
include einbindet.

Autor: I. L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> das liegt aber nicht an der IDE, sondern daran das man NIE c Datein per
> include einbindet.

Wie bindet man sonst *.c Dateien ein?
Ich hab z.B.:
#include <avr/interrupt.h>
#include <stdio.h>
#include <avr/io.h>
#include <util/delay.h>
#include <string.h>
#define SYSCLK 16000000                    
#include "uart.c"

mit Programmers Notepad programmiert, ohne Probleme.

Mit Eclipsse scheint sowas nicht zu gehen?
Wie binde ich denn dann den Inhalt der *.c Dateien ein?


Gruß Knut

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum zum kuckuck willst du das machen?

Der C Gott hat .h Dateien erfunden, dann nutze diese auch!!!

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ingo L. schrieb:
...
> #include "uart.c"
> mit Programmers Notepad programmiert, ohne Probleme.

Du programmierst mit Programmers Notepad? Eher nicht. PN ist ein Editor, 
mehr nicht. Compilieren tut dahinter WinAVR, genauer ein Compiler und 
ein Linker, gesteuert von einem makefile.

In das makefile schreibt man hinein, welche .c-Files alle zum Projekt 
gehören, und der Linker baut die dann zusammen.

> Mit Eclipsse scheint sowas nicht zu gehen?
> Wie binde ich denn dann den Inhalt der *.c Dateien ein?

Mit Eclipse geht das ganz genauso. Nur nimmt dir das sogar noch die 
Arbeit ab, das makefile zu erstellen, das geht da ganz automatisch.

Du musst lediglich alle .c-File dem Projektordner hinzufügen.

Oliver

Autor: Knut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry wenn ich zu doof bin, wenn ich meine uart. c in das 
projektverzeichnis
packe erkennt der kopiler das nicht. Die ganzen Direktiven wie zb PORTA 
werden nicht mehr
erkannt obwohl die Datei Links im Suchbaum auftaucht? Was mache ich 
falsch
beim Einbinden? Wozu überhaupt ".c Files einbinden? Kann man das nicht 
Header Dateien
stopfen? Ich bin noch nicht so sehr erfahren und sammel noch Erfahrungen


Gruß Knut

Autor: Oiver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jede .c-Datei wird einzeln kompiliert, also müssen auch in jeder 
.c-Daten alle benötigten .h-Dateien inkludiert werden. Wenn in uart.c 
zb. PORTA nicht erkannt wird, bedeutet das, daß die Datei kompiliert 
werden soll, dort aber das #include <avr/io.h> fehlt.

Oliver

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.