Forum: Compiler & IDEs Linker spinnt


von Christian Rötzer (Gast)


Lesenswert?

Hallo zusammen,

nachdem ich mich nun auf dem AVR in die Welt der Hochsprache begeben 
habe, hänge ich nunmehr an einem Low Level Problem.  Folgendes passiert:
Ich schreibe ein C-Module, das sowohl 'printf' (libprintf_flt) also auch 
'sqrt' (libm) aufruft. Ich bekomme einen undefined reference auf 'sqrt', 
sonst nichts. Wenn ich den 'printf'-Aufruf entferne, aber 'sqrt' drin 
lasse kann ich linken. Wo ist Problem? Aufruf des Linkers mit:
avr-gcc -mmcu=atmega128 -Wl,-Map,host.map,-u,vfprintf -lprintf_flt -lm 
-g -o host.elf modul1.o modul2.o

Die Module werden separat übersetzt

Kommt das jemanden bekannt vor?

von Joerg Wunsch (Gast)


Lesenswert?

Falsche Reihenfolge.  Libs (-lm) immer ganz hinten angeben,
da sie nur danach durchsucht werden, ob sie bislang ungelöste
Referenzen auflösen können.  Da Du die Objekte, die die
ungelöste Referenz zu sqrt() erzeugen, erst nach der lib hast,
wird diese nicht mehr aufgelöst.

von Christian Rötzer (Gast)


Lesenswert?

Danke, das war's!

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.