Forum: Compiler & IDEs Hilfe beim Build - komme mit einer Fehermeldung nicht klar


von MarkusC (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

hab ein Projekt gefunden welches ich nachbauen und anpasse möchte. Sonst 
mache ich nur wenig mit C. Studio4 bricht das Make mit folgender Meldung 
ab: (gekürzt)

avr-gcc -mmcu=atmega64 -Wl,-Map=tas.map main.o lcd.o i2cmaster.o     -o 
tas.elf
i:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\lib 
c.a(fp_powsodd.o):  In function `__fp_powsodd':
(.text.avr-libc.fplib+0x10): relocation truncated to fit: R_AVR_13_PCREL 
against symbol `__mulsf3' defined in .text section in 
i:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_mul_sf.o)
i:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\lib 
c.a(fp_powsodd.o):  In function `__fp_powsodd':
(.text.avr-libc.fplib+0x20): relocation truncated to fit: R_AVR_13_PCREL 
against symbol `__mulsf3' defined in .text section in 
i:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_mul_sf.o)
i:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\lib 
c.a(inverse.o):  In function `inverse':
(.text.avr-libc.fplib+0xc): relocation truncated to fit: R_AVR_13_PCREL 
against symbol `__divsf3' defined in .text section in 
i:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_div_sf.o)
.
.
.
i:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\lib 
c.a(modf.o):  In function `modff':
(.text.avr-libc.fplib+0x3e): relocation truncated to fit: R_AVR_13_PCREL 
against symbol `__subsf3' defined in .text section in 
i:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_addsub_sf.o)
make: *** [tas.elf] Error 1
Build failed with 1 errors and 0 warnings...

Alle includes sind da, die Sourcen sind da.
Habe mal den Projektordner in den Anhang gestellt.

Wäre dankbar wenn jemand einen Tip für mich hat.

Gruß
Markus

von Stefan E. (sternst)


Lesenswert?

1
avr-gcc -mmcu=atmega64 -Wl,-Map=tas.map main.o lcd.o i2cmaster.o  -o tas.elf
Füge der Zeile ein -lm hinzu, aber nicht irgendwo, sondern hinter den 
.o Files.

von MarkusC (Gast)


Lesenswert?

Danke,

nur wo? In den ausgegebenen Meldungen vom make ja sicher nicht. Im 
Makefile habe ich das -lm hinter die Ausgabeobjekte gesetzt und  make 
all gestartet. Bricht ab.

von Hans Ulli K. (Gast)


Lesenswert?

Ich kenne jetzt die Architektur nicht, aber der Fehler kommt von Linker.

Irgendwie ist Speicherplatz für die Relokationstabelle zu klein.

z.B. wird nur Speicher für einen "kurzen" Sprung (8 Bit relativ) 
reserviert, der Compilker muss aber einen Sprung mit 16 Bit Adresse 
machen. Deshalb wird die 16 Bit Addresse auf 8 Bit gekürtzt.

-> relocation truncated

Die Symbole der math-Lib -lm sind ja da.
-> against symbol `__subsf3' defined in .text

von Detlef B. (Gast)


Lesenswert?

Bloß keine Infos oder gar Fehlermeldungen geben! Sonst ist das Problem 
schnell gelöst. Und du willst doch Spaß bis weit ins neue Jahr haben.

von MarkusC (Gast)


Lesenswert?

ok ;-)

habs gefunden. Das -lm musste an eine andere Stelle im Make. Danke:-)

Und wie soll man da selber drauf kommen ;-((

von Stefan E. (sternst)


Lesenswert?

Hans Ulli Kroll schrieb:
> Die Symbole der math-Lib -lm sind ja da.
> -> against symbol `__subsf3' defined in .text

Und was steht da noch in der Zeile?
1
... defined in .text section in i:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a
Dass das Symbol eben nicht aus der angepassten Math-Lib (libm.a) 
aufgelöst wurde, sondern aus der (Compiler eigenen) generischen 
(libgcc.a).

von MarkusC (Gast)


Lesenswert?

Detlef B. schrieb:
> Bloß keine Infos oder gar Fehlermeldungen geben! Sonst ist das Problem
>
> schnell gelöst. Und du willst doch Spaß bis weit ins neue Jahr haben.

Hallo,
welche Infos brauchst du denn? Ich hab alles was Build ausgespuckt hat 
und mit wichtig schien kopiert. Da ich die Fehlerursache nicht kenne 
kann ich auch keine gezielten Infos zur Ursache geben.

Und nun? Ist der erzeugte Code nun i.O.? Komme erst später dazu ihn zu 
testen.
Vielen Dank für die schnelle Hilfe.

Markus C.

von Hans Ulli K. (Gast)


Lesenswert?

@sternst

OK.
Habe gerade nach deinem Hinweis in /usr/avr/lib nach dem Symbol gegrept 
(Linux)

@Markus C.

Ändere mal das Makefile
An Zeile 28 ein -lm anfügen
1
LDFLAGS +=  -Wl,-Map=tas.map -lm

von Detlef B. (Gast)


Lesenswert?

MarkusC schrieb:
> welche Infos brauchst du denn?

Wenn du ein lapidares:

MarkusC schrieb:
> Bricht ab.

als sinnvollen Beitrag zur Fehlersuche ansiehst, ist dir nicht zu 
helfen.

von Stefan E. (sternst)


Lesenswert?

Hans Ulli Kroll schrieb:
> Ändere mal das Makefile
> An Zeile 28 ein -lm anfügen
> LDFLAGS +=  -Wl,-Map=tas.map -lm

Nein. Das -lm muss hinter die Objekt-Dateien, davor nützt es rein gar 
nichts.


@  MarkusC:
Das ist doch offensichtlich ein AVR-Studio-4-Projekt. Also füge die Lib 
in der IDE hinzu, nicht im Makefile (welches dir sowieso wieder 
überschrieben wird).
Project -> Configuration Options -> Libraries

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.