ELF Problem durch pow() Funktion

Gast #1084580
Lesenswert?

Hallo,

ich habe leider folgendes Problem.
Ich möchte die pow() Potenzfunktion aus der math.h verwenden, jedoch 
kommt beim compilieren eine Fehlermeldung das die elf-Datei nicht 
erstellt werden konnte.

Also es handelt sich um folgende Code zeilen:
1
  double dHoehe=0, dVar1=0, dVar2=0;
2
  //...
3
  
4
  if(uiTmp16 <= 8192)
5
    fTemperature = ((uiTmp16 & 0x1FFF)/20);
6
  else
7
    fTemperature = -((uiTmp16 & 0x1FFF)/20);
8

9
  fPressure = uiTmp32 / 4;
10
  dVar1 = (fPressure / 101325);
11
  dVar2 = (0.0065 * (287.052 / 9.82));
12
  dHoehe = ((273.15 + fTemperature) * (1-(pow(dVar1, dVar2))))/(0.0065);
Übergebe ich die Parameter vllt falsch? Ich habe es auch schon 
ausprobiert mit pow(5,3), dann läuft der Compiliervorgang ohne 
Fehlermeldung durch.
Angehängte Dateien:
Persönliche Seite #1084628
Lesenswert?

Ja ist im Makefile.

In manchen Makefiles gibt es diese Zeile, wenn die Mathelibrary 
eingebunden werden soll (bei deinem Projekt)

MATH_LIB = -lm

und diese, wenn nicht (nicht bei deinem Projekt)

MATH_LIB =

Die eigentlichen Optionen für den Linker werden dann so zusammengebaut:

LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)

Wichtig ist, dass die Mathelibrary am Schluss steht. Nur dann ist 
sicher, dass alle benötigten Mathesymbole aus der vorhergehenden 
Libraries auch gefunden werden.

Und in der Kommandozeile tauchen die so zusammengebauten Linkeroptionen 
in diesem Abschnitt auf:

# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
  @echo
  @echo $(MSG_LINKING) $@
  $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)

ADD: Wenn du AVR Studio benutzt, kannst du das Makefile nicht 
unmittelbar ändern. Dort geht das auf einer der Einstellungsunterseiten 
in dem du die Mathelibrary libm.a von der linken Spalte in die rechte 
Spalte ziehst.

http://www.google.de/search?hl=de&client=firefox-a&rls=org.mozilla%3Ade%3Aofficial&hs=CEf&q=%22relocation+truncated+to+fit%3A%22+R_AVR_13_PCREL+%22against+symbol%22+libgcc.a+&btnG=Suche&meta=
Gast #1085335
Lesenswert?

>Aktuelles AVR Studio benutzen, da sollte libm.a (-lm) immer dabei sein.

Ist sie anscheinend auch. Aber im makefile taucht -lm nur auf, wenn man 
es explizit in den options anwählt.

Wo wird denn die libm "automatisch" dazugelinkt?

Oliver
#1103966
Lesenswert?

Ich habe versucht die libm.a unter
"Project > Configuration Options > Libraries"
einzubinden. Leider geht das bei mir nicht, da ich auch den Library 
Search Path nicht einstellen kann. (Siehe Anhang)
Das direkt hinzufügen der MATH_LIB in dem Makefile, brachte auch keinen 
Erfolg.
Wieso kann der Library Search Path nicht eingestellt werden? Hat da 
jemand eine Idee? Muss man beim erstellen des Porjektes vllt irgendetwas 
bestimmtes beachten?

Gruß Eugen
Angehängte Dateien:

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