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
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.
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.
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
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.
ok ;-) habs gefunden. Das -lm musste an eine andere Stelle im Make. Danke:-) Und wie soll man da selber drauf kommen ;-((
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).
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.
@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 |
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.