Linker spinnt

Gast #39491
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?
Gast #39492
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.

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