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

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.

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.