Kompilieren unter openSUSE Leap 15.0

#5698965
Lesenswert?

Ich versuche gerade unter openSUSE Leap 15.0 AVR Source zu kompilieren.
Und erhalte folgende Fehlermeldung:
1
derschatten@linux-5at6:~/Downloads/attiny4313> make
2
DEP main.c util.c key_tap.c uart4313.c uart_helper.c
3
CC  main.c -o main.o
4
main.c:25:10: fatal error: avr/io.h: No such file or directory
5
 #include <avr/io.h>
6
          ^~~~~~~~~~
7
compilation terminated.
8
make: *** [Makefile:60: main.o] Fehler 1
9
derschatten@linux-5at6:~/Downloads/attiny4313>

avr-libc
cross-avr-gcc7
gcc
gcc7


ist alles installiert.
Was fehlt mir da noch?


Unter Windows verwende ich den WinAVR, da läuft das problemlos.
Gast #5699015
Lesenswert?

Bei mir installiert ist unter 15.0:

cross-avr-binutils
cross-avr-gcc8
cross-avr-gdb
avr-libc

Ich meine mich zu entsinnen, dass ich es mit cross-avr-gcc7 auch nicht 
zum laufen gebracht habe. Mit V8 war es dann kein Problem.
Gast #5700125
Lesenswert?

Zeige mal dein Makefile. In meinem steht dies drin:
1
# Binaries to be used
2
# You may add the path to them if they are not in the PATH variable.
3
CC       = avr-gcc
4
OBJCOPY  = avr-objcopy
5
OBJDUMP  = avr-objdump
6
AVRDUDE  = avrdude
7
AVR_SIZE = avr-size
Angehängte Dateien:
#5700484
Lesenswert?

1
# Source files 
2
TARGET   = main
3
SOURCES  = main.c util.c key_tap.c uart4313.c uart_helper.c
4

5
# Target MCU & fuses
6
MCU  = attiny4313
7
F_CPU  = 8000000UL
8
LFUSE  = 0xD4
9
HFUSE  = 0xDB
10
EFUSE   = 0xFF
11

12
# Compiler configuration
13
CC     = avr-gcc 
14
OPT    = s
15

16
CFLAGS = -Wall -DF_CPU=$(F_CPU) -O$(OPT)
17
CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -feliminate-unused-debug-types -ffunction-sections
18
CFLAGS += -Wa,-adhlns=$(<:.c=.s)
19

20
ALL_CFLAGS = -mmcu=$(MCU)  $(CFLAGS)
21

22
LDFLAGS    = -s -Wl,-Map=$(TARGET).map,--cref,--gc-sections,--relax
23

24
# Avrdude configuration
25
AVRDUDE_PROG  = usbasp
26
AVRDUDE_FLAGS   = -y -p $(MCU) -c $(AVRDUDE_PROG)
27

28
AVRDUDE_WRITE_FLASH  = -U flash:w:$(TARGET).hex
29
AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
30

31
# Other tools
32
OBJCOPY = avr-objcopy
33
SIZE  = avr-size
34
AVRDUDE  = avrdude
35

36
# Targets
37
.PHONY: all
38
all: depend hex eeprom size
39

40
.PHONY: hex
41
hex: $(TARGET).hex
42

43
.PHONY: eeprom
44
eeprom: $(TARGET).eep
45

46
OBJECTS  = $(SOURCES:.c=.o)
47
ASM = $(SOURCES:.c=.s)
48

49
$(TARGET).elf: $(OBJECTS)
50
  @echo "LD  $(OBJECTS)";\
51
  $(CC) $(ALL_CFLAGS) $(OBJECTS) --output $@ $(LDFLAGS)
52

53
$(TARGET).hex: $(TARGET).elf
54
  $(OBJCOPY) -O ihex -R .eeprom $< $@
55

56
$(TARGET).eep: $(TARGET).elf
57
  -$(OBJCOPY) -O ihex -j .eeprom --set-section-flags=.eeprom="alloc,load" \
58
  --change-section-lma .eeprom=0 $< $@
59
%.o : %.c
60
  @echo "CC  $< -o $@";\
61
  $(CC) -c $(ALL_CFLAGS) $< -o $@
62

63
# Programming with avrdude
64

65
.PHONY: program
66
program: $(TARGET).hex $(TARGET).eep
67
  $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
68

69
.PHONY: fuses
70
fuses: lfuse hfuse efuse
71
.PHONY: lfuse
72
lfuse:
73
  $(AVRDUDE) $(AVRDUDE_FLAGS) -i 10 -U lfuse:w:$(LFUSE):m
74
.PHONY: hfuse
75
hfuse:
76
  $(AVRDUDE) $(AVRDUDE_FLAGS) -i 10 -U hfuse:w:$(HFUSE):m
77
.PHONY: efuse
78
efuse:
79
  $(AVRDUDE) $(AVRDUDE_FLAGS) -i 10 -U efuse:w:$(EFUSE):m
80
.PHONY: reset
81
reset:
82
  $(AVRDUDE) $(AVRDUDE_FLAGS) -i 10 -U lfuse:r:/dev/null:m
83

84
# Clean
85
.PHONY: clean
86
clean:
87
  rm -f $(TARGET).hex $(TARGET).eep $(TARGET).elf $(TARTGET).map
88
  rm -f $(OBJECTS)
89
  rm -f $(ASM)
90

91
# Display Size
92
.PHONY: size
93
size: $(TARGET).elf
94
  @echo -n "SIZE "; $(SIZE) -A $(TARGET).elf
95

96
# Display flags
97
.PHONY: cflags
98
cflags:
99
  @echo CFLAGS=$(CFLAGS)
100
.PHONY: ldflags
101
ldflags:
102
  @echo LDFLAGS=$(LDFLAGS)
103
.PHONY: all_cflags
104
all_cflags:
105
  @echo ALL_CFLAGS=$(ALL_CFLAGS)
106

107
# dependeny 
108
.PHONY: depend
109
depend:
110
  @echo "DEP $(SOURCES)"; $(CC) $(ALL_CFLAGS) -MM $(SOURCES) > .depend
111

112
ifeq (.depend,$(wildcard .depend)) 
113
include .depend
114
endif
Gast #5700508
Lesenswert?

CC ist gesetzt, also kann es wohl nicht daran liegen, dass der falsche 
Compiler aufgerufen wird. Das war meine erste Vermutung.

Es scheint dann wohl eher am Include-Pfad zu hängen. Bei mir (Debian) 
liegen sie in /usr/lib/avr.

Vegleiche mal deinen Pfad mit der Ausgabe von
1
avr-gcc --print-search-dirs

Falls sie nicht überein stimmen, kannst du das vielleicht elegant mit 
einem Symlink (Befehl mklink) lösen. Dann musst du nicht alle Makefiles 
ändern.
#5701342
Lesenswert?

Danke!
cross-avr-gcc8 installiert.
Bin schon ein Stück weiter. Trotzdem zickt das Teil noch rum.

Was ist da wieder faul?
Die Pakete von dir oben sind alle installiert.
1
derschatten@linux-5at6:~/Downloads/attiny4313> make
2
DEP main.c util.c key_tap.c uart4313.c uart_helper.c
3
CC  main.c -o main.o
4
CC  util.c -o util.o
5
CC  key_tap.c -o key_tap.o
6
CC  uart4313.c -o uart4313.o
7
CC  uart_helper.c -o uart_helper.o
8
LD  main.o util.o key_tap.o uart4313.o uart_helper.o
9
/usr/lib64/gcc/avr/8/ld: warning: -z relro ignored
10
/usr/lib64/gcc/avr/8/ld: main.o: in function `parse':
11
main.c:(.text.parse+0x1e): undefined reference to `uart_print_help'
12
/usr/lib64/gcc/avr/8/ld: main.c:(.text.parse+0x6a): undefined reference to `uart_print_err'
13
/usr/lib64/gcc/avr/8/ld: main.o: in function `main':
14
main.c:(.text.startup.main+0x6): undefined reference to `init'
15
collect2: error: ld returned 1 exit status
16
make: *** [Makefile:50: main.elf] Fehler 1
Gast #5702464
Lesenswert?

1
 # make -L/usr/lib/avr -L/lib64 -l/lib/avr/some_avr.lib.so -I/usr/include/avr

Man kann mit den Compiler - Flags :  -D, -I ( include )
und den Linker - Flags : -L, -l ( lib )

die beiden Kompiler und Linker auf die richtigen Pfade der benötigten 
Dateien hinweisen .

Auch
1
 # export LIBS='-L/avr -L/lib256' 
2
 # make
Gast #5702479
Lesenswert?

Mit Linker Flags muß man sich auseinandersetzen :
https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

Du hast folgende VARIABLEN im Makefile ,
welcher bei manuellen Eintragsveränderungen die TABS beim
abspeichern bewahren muß :

Linker :
1
LDFLAGS    = -s -Wl,-Map=$(TARGET).map,--cref,--gc-sections,--relax

Und diese Line könnte so aussehen :
1
LDFLAGS    = -s -Wl,-Map=$(TARGET).map,--cref,--gc-sections,--relax -L/pfad/zur/mappe/wo/bibliothek/drin/installiert/ist


Compiler :
1
CFLAGS = -Wall -DF_CPU=$(F_CPU) -O$(OPT)
2
CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -feliminate-unused-debug-types -ffunction-sections
3
CFLAGS += -Wa,-adhlns=$(<:.c=.s)

Und an diese Compiler - Flags - Variable könnte angehängt werden :
1
CFLAGS = -Wall -DF_CPU=$(F_CPU) -O$(OPT)
2
CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -feliminate-unused-debug-types -ffunction-sections
3
CFLAGS += -Wa,-adhlns=$(<:.c=.s)
4
CFLAGS += -I/pfad/wo/avr/headers/directory

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