Forum: Compiler & IDEs avgcc - LInker Fehler - relocation truncated to fit: R_AVR_13_PCREL against symbol


von Michael J. (jogibaer)


Lesenswert?

Hallo,

da programmiert man so vor sich hin, und auf einmal bekomme ich
einen Fehler beim Linken, den ich nur wegbekomme, wenn ich irgendwo
ein paar Zeilen Code auskommentiere:

folgende Fehlermeldung:

->make

avr-gcc -g -Os -Wall -Wextra -Wstrict-prototypes -mmcu=atmega324p 
-mcall-prologues -fomit-frame-pointer -fno-inline-small-functions 
-fno-tree-scev-cprop -fno-split-wide-types -lm  -c main.c
avr-gcc -Wl,-Map=main.map,--cref,--section-start=.text=0x0000,--relax 
-mmcu=atmega324p -gstabs,-ahlms=main.o -omain.elf main.o spi.o smk.o 
parameter.o rs232C1.o error.o comm.o adc.o kty81.o i2c.o pcf8574.o 
systimer.o eeprom.o protokoll.o
/usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm324p.o: In function 
`__bad_interrupt':
../../../../crt1/gcrt1.S:195: relocation truncated to fit: 
R_AVR_13_PCREL against symbol `__vector_20' defined in .text section in 
rs232C1.o
collect2: error: ld returned 1 exit status
make: *** [main] Fehler 1


Ich habe hier im Forum irgendwo gelesen, daß dieses ein Bug mit zu 
weiten
Sprüngen wäre, ist dies richtig ?

Was kann ich dagegen tun ?

Danke an alle
Jogibär

von Marius W. (mw1987)


Lesenswert?

Ist dein Flash-Speicher eventuell voll?

Gruß
Marius

von Oliver (Gast)


Lesenswert?

Dagegen tun kannst du das, was man in solchen Fällen immer tut, nämlich 
die relevante Fehlermeldung nach google zu kopieren, und dann einfach 
mal nachlesen, was der Rest der Menschheit sich dazu schon ausgedacht 
hat. Denn, auch wenn du es dir kaum vorstellen kannst, du bist nicht der 
Erste mit dieser Fehlermeldung. Eigentlich ist man inzwischen niemals 
der Erste...

Oliver

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ist ein Bug im Zusammenhang mit -mrelax.  Lass das mal weg.  Du kannst
auch probieren, ob es hilft, auch beim Compilieren bereits -mrelax mit
anzugeben.

von Michael J. (jogibaer)


Lesenswert?

Oliver schrieb:
> Dagegen tun kannst du das, was man in solchen Fällen immer tut, nämlich
> die relevante Fehlermeldung nach google zu kopieren, und dann einfach
> mal nachlesen, was der Rest der Menschheit sich dazu schon ausgedacht
> hat. Denn, auch wenn du es dir kaum vorstellen kannst, du bist nicht der
> Erste mit dieser Fehlermeldung. Eigentlich ist man inzwischen niemals
> der Erste...
>
> Oliver

Hallo Oliver,

Du wirst es nicht glauben, das habe ich schon getan.
Dort wurden mehrere Ursachen genannt.
Daher ja die Frage zu den Sprüngen.
Ganz blöde bin ich noch nicht !

Hallo Marius,
der ist es nicht. Bin erst bei 8kb Programmspeicher, habe aber 32kb.

Hallo Jörg,

ich habe das Problem erstmal gelöst, indem ich die Reihenfolge der 
Dateien,
die compiliert werden, geändert habe. Damit ist das Problem erst mal 
weg.
Falls es wieder auftritt, werde ich mal Deinen Vorschlag ausprobieren.


-mrelax
Try to replace "CALL" resp. "JMP" instruction by the shorter "RCALL"
resp. "RJMP" instruction if applicable.  Setting "-mrelax" just adds
the "--relax" option to the linker command line when the linker is 
called.


Vielen Danke an alle
Jogibär

von Walter T. (nicolas)


Lesenswert?


von Michael J. (jogibaer)


Lesenswert?

Hallo,

stimmt, ist mir auch heute früh aufgefallen.

Jogibär

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.