Linker ERROR bei U8GLIB auf M32u4

OP #4447575
Im Anhang sind meine Makefile sowie meine Main.c zu finden.

Hier ist noch eine kleine Ordnerstruktur:

.
+- makefile
+- main.c
+- lib
 +- u8glib
  +- chessengine.c
  +- u8g.h
  +- ...

Wenn ich nun mein Projekt, so wie es alles ist, durch meine Makefile 
schicke (also »make«), dann gibt's ein paar Fehler:
1
make
2
  CC      main.c
3
  CC      lib/u8glib/chessengine.c
4

5
  [...]
6

7
  CC      lib/u8glib/u8g_u8toa.c
8
  CC      lib/u8glib/u8g_virtual_screen.c
9
  LD      FIRMWARE.ELF
10
./lib/u8glib/chessengine.o: In function `main':
11
/home/tekkkz/Dropbox/workspace/electronics/avr/atmega32/dev/main.c:9: multiple definition of `u8g_setup'
12
main.o:/home/tekkkz/Dropbox/workspace/electronics/avr/atmega32/dev/main.c:9: first defined here
13
/usr/bin/avr-ld: Disabling relaxation: it will not work with multiple definitions
14
./lib/u8glib/chessengine.o: In function `sys_init':
15
/home/tekkkz/Dropbox/workspace/electronics/avr/atmega32/dev/main.c:17: multiple definition of `sys_init'
16
main.o:/home/tekkkz/Dropbox/workspace/electronics/avr/atmega32/dev/main.c:17: first defined here
17
./lib/u8glib/chessengine.o: In function `u8g_prepare':
18
/home/tekkkz/Dropbox/workspace/electronics/avr/atmega32/dev/main.c:22: multiple definition of `u8g_prepare'
19
main.o:/home/tekkkz/Dropbox/workspace/electronics/avr/atmega32/dev/main.c:22: first defined here
20
./lib/u8glib/chessengine.o: In function `u8g_box_frame':
21
/home/tekkkz/Dropbox/workspace/electronics/avr/atmega32/dev/main.c:28: multiple definition of `u8g_box_frame'
22
main.o:/home/tekkkz/Dropbox/workspace/electronics/avr/atmega32/dev/main.c:28: first defined here
23
./lib/u8glib/chessengine.o: In function `u8g_string':
24
/home/tekkkz/Dropbox/workspace/electronics/avr/atmega32/dev/main.c:37: multiple definition of `u8g_string'
25
main.o:/home/tekkkz/Dropbox/workspace/electronics/avr/atmega32/dev/main.c:37: first defined here
26
./lib/u8glib/chessengine.o: In function `u8g_line':
27
/home/tekkkz/Dropbox/workspace/electronics/avr/atmega32/dev/main.c:44: multiple definition of `u8g_line'
28

29
[...]
30

31
./lib/u8glib/u8g_clip.o: In function `u8g_box_frame':
32
main.c:(.text+0xa4): undefined reference to `u8g_DrawStr'
33
main.c:(.text+0xb4): undefined reference to `u8g_DrawBox'
34
main.c:(.text+0xc6): undefined reference to `u8g_DrawBox'
35
main.c:(.text+0xd6): undefined reference to `u8g_DrawStr'
36
main.c:(.text+0xe6): undefined reference to `u8g_DrawFrame'
37
main.c:(.text+0xf6): undefined reference to `u8g_DrawFrame'
38
./lib/u8glib/u8g_clip.o: In function `u8g_string':
39
main.c:(.text+0x112): undefined reference to `u8g_DrawStr'
40
main.c:(.text+0x124): undefined reference to `u8g_DrawStr90'
41
main.c:(.text+0x136): undefined reference to `u8g_DrawStr180'
42
main.c:(.text+0x14a): undefined reference to `u8g_DrawStr270'
43
./lib/u8glib/u8g_clip.o: In function `u8g_line':
44
main.c:(.text+0x162): undefined reference to `u8g_DrawStr'
45
main.c:(.text+0x174): undefined reference to `u8g_DrawLine'
46
main.c:(.text+0x188): undefined reference to `u8g_DrawLine'
47
main.c:(.text+0x19a): undefined reference to `u8g_DrawLine'
48
main.c:(.text+0x1ae): undefined reference to `u8g_DrawLine'
49
./lib/u8glib/u8g_clip.o: In function `u8g_ascii_1':
50

51
[...]
52

53
main.c:(.text+0x26a): undefined reference to `u8g_DrawStr'
54
./lib/u8glib/u8g_virtual_screen.o: In function `main':
55
main.c:(.text.startup+0xc): undefined reference to `u8g_FirstPage'
56
main.c:(.text.startup+0x18): undefined reference to `u8g_NextPage'
57
main.c:(.text.startup+0x38): undefined reference to `u8g_Delay'
58
collect2: error: ld returned 1 exit status
59
makefile:38: recipe for target 'FIRMWARE.ELF' failed
60
make: *** [FIRMWARE.ELF] Error 1

Ich verstehe nicht was das bedeutet/woran das liegt.

Ich hoffe jemand kann mir helfen. Falls ihr noch mehr Informationen oder 
einen Link zu einem Beispielprojekt von U8GLIB haben wollt um meinen 
Fehler zu finden, dann sagt bescheid.

MfG,
Martin
Angehängte Dateien:
OP
An der File liegt es nicht, denn mit dem makefile code aus deren 
Examples funktioniert das compilen, siehe hier:
1
$(FIRMWARE).ELF: $(FIRMWARE).a($(OBJS))
2
  $(LINK.o) $(CFLAGS) $(FIRMWARE).a -o $@

Und das hier erzeugt meinen obigen Fehler:
1
$(FIRMWARE).ELF $(FIRMWARE).MAP: $(OBJS)
2
  $(Q)printf "  LD      $(FIRMWARE).ELF\n"
3
  $(Q)$(CC) $(LDFLAGS) $(OBJS) -o $(FIRMWARE).ELF
4
  $(Q)$(SIZ) $(FIRMWARE).ELF
5

6
$(OBJS): $(SRCS)
7
  $(Q)printf "  CC      $(*).c\n"
8
  $(Q)$(CC) $(CFLAGS) -c -o $@ $<

Ich möchte dieses $(LINK.o), was von make definiert ist (s. make -p) 
nicht nutzen, weil es so viel nicht-mutable Output liefert.

Jemand eine Idee wie ich dieses LINK.o zu meinem Stil umschreiben kann?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.