www.mikrocontroller.net

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


Autor: Eugen Kannsnet (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
  double dHoehe=0, dVar1=0, dVar2=0;
  //...
  
  if(uiTmp16 <= 8192)
    fTemperature = ((uiTmp16 & 0x1FFF)/20);
  else
    fTemperature = -((uiTmp16 & 0x1FFF)/20);

  fPressure = uiTmp32 / 4;
  dVar1 = (fPressure / 101325);
  dVar2 = (0.0065 * (287.052 / 9.82));
  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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Eugen Kannsnet (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehlermeldung hatte ich angehängt.
Linkerkommandozeile? Ist irgendwo im Makefile sicherlich oder?

Autor: Eugen Kannsnet (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Eugen Kannsnet (kannsnet)
Datum:

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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Eugen Kannsnet (kannsnet)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.