Linker ERROR bei U8GLIB auf M32u4

OP #4447575
Lesenswert?

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 #4448436
Lesenswert?

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

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