Forum: Compiler & IDEs ELF Problem durch pow() Funktion


von Eugen Kannsnet (Gast)


Angehängte Dateien:

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.

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


Lesenswert?

Eugen Kannsnet wrote:

> 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.

Hrmpf.  Welche Fehlermeldung denn?

Meine Glaskugel meint, dass du -lm in der Linkerkommandozeile vergessen
hast... (bzw. libm.a in AVR Studio).

von Eugen Kannsnet (Gast)


Lesenswert?

Fehlermeldung hatte ich angehängt.
Linkerkommandozeile? Ist irgendwo im Makefile sicherlich oder?

von Eugen Kannsnet (Gast)


Lesenswert?

Komisch die Fehlermeldung kommt nur wenn ich dHoehe zurückgeben will, 
wenn ich fTemperature oder fPressure zurück gebe. Klappt alles. Aber das 
ist ja nicht der Sinn der Sache.

von Stefan B. (stefan) Benutzerseite


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=

von Oliver (Gast)


Lesenswert?

>Ja ist im Makefile.

Beim AVR-Studio bringen Änderungen im makefile nichts.

Unter "Project/Configuration Options" Libraries anwählen, dort die 
libm.a hinzufügen.

Oliver

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


Lesenswert?

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

von Eugen K. (kannsnet)


Lesenswert?

Ok danke vielmals, werde es demnächst probieren und falls ich es net 
gebacken bekomm schrei ich hier wieder um Hilfe. :D

von Oliver (Gast)


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

von Eugen K. (kannsnet)


Angehängte Dateien:

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

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.