ELF Problem durch pow() Funktion

Gast #1084580
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:
Moderator Persönliche Seite #1084596
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).
Gast #1084621
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.
Persönliche Seite #1084628
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 #1084651
>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
Gast #1085335
>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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.