Komischer Fehler tritt plötzlich beim Kompilieren auf (AVR STUDIO)

Gast #1476757
Lesenswert?

Hallo zusammen,
Ich hab ein Project im AVR Studio 4 was bisher hervorragend funktioniert 
hat. Es ist eher groß und ich habe nun noch eine zusätliche Header Datei 
hinzugefügt die lediglich eine enum-Deklaration enthält. Zudem habe ich 
diverse Funktionen geändert um diesen neuen variablentyp zu verwenden 
aber ich habe darauf geachtet auch alle Prototypen zu ändern. Ich 
bekomme dennoch einen Fehler:

c:/winavr-20090313/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr6\lib 
c.a(cmpsf2.o):  In function `__lesf2':
(.text.fplib+0x0): multiple definition of `__eqsf2'

c:/winavr-20090313/bin/../lib/gcc/avr/4.3.2/avr6\libgcc.a(_eq_sf.o):(.te 
xt+0x0):  first defined here
make: *** [Datei.elf] Error 1

Ich habe keine Ahnung woe libc.a herkommt, geschweige denn was da 
überhaupt drinnen ist. Von der Funktion habe ich auch noch nie gehört. 
Wie können ein paar harmlose Änderungen zu so nem beknackten Fehler 
führe? Hat vielleicht einer von euch schonmal diesen Fehler gehabt, und 
kennt dessen Ursache und einen Lösungsweg?

Gruß,
Shibby
Gast #1479093
Lesenswert?

Ist alles auf dem neusten Stand. Ich kann mir das immer noch nicht 
erklären, obwohl ich nun zumindest weiß was bei mir die Fehlermeldung 
auslöst. Ich arbeite an einem Taschenrechner und habe eine Funktion die 
die Input String auseinander nimmt und das Ergebnis berechnet. Es unter 
anderem auch eine Funktion die nur dafür zuständig ist gewisse 
mathematische operationen durchzuführen (für Zwischenergebnisse verwende 
ich diese in der erst genannten Funktion). Ich prüfe was für eine 
Operation zu machen ist in einem switch statement. Beispiel:

case Divide:
{
  double param2 = pOperandStack->top();
  pOperandStack->pop();
  double param1 = pOperandStack->top();
  pOperandStack->pop();

  // No divisions by 0.
  if (param2 == 0)
  {
    *pErrorState = 2;
    return 0;
  }

  return param1 / param2;
}

Wenn ich den Teil
  if (param2 == 0)
  {
    *pErrorState = 2;
    return 0;
  }
weglasse funktioniert alles bestens. Mit pErrorState kann ich main() 
mitteilen welche art von Fehler aufgetreten ist (zB Syntax, Math etc.).
Ich hab auchn haufen Warnungen weil ich unbehandelte Fälle in anderen 
Funktionen hab, aber das interessiert mich im Moment nicht, darum kümmer 
ich mich wenn alles andere läuft.
Ich bekomm auch schon nen fehler wenn ich nur sowas leichtes hinzufüge:

  if (param2 == 2)
  {
    return 3;
  }

Egal was fürn Blödsinn...plözlich kommt diese bekloppte Fehlernachricht 
und ich weiß nicht warum, geschweige denn wie ich das Problem lösen 
soll.
Bin über jeglich Hilfe froh :).

Gruß,
Shibby
Gast #1479150
Lesenswert?

Bin noch ein bischen neu bei der Sache ;). Aber ich gehe zB in AVR 
Studio 4 unter Project -> Configuration Options und dann zum Tab 
"Libraries". Bei dem Fenster "Link with These Objects:" ist alles leer. 
Ich könnte libc.a hinzufügen. Wäre das die Lösung? Ich frage mich WARUM 
dieser Fehler auftritt obwohl ich eigentlich nichts ungewöhnliches 
mache.

Danke für die Schnelle Antwort :)
Gast #1479210
Lesenswert?

Danke, wie/wo kann ich die hinzufügen? Und warum ist hier die Mathelib 
notwendig. Alles hat funktioniert als es so aussah:

case Divide:
{
  double param2 = pOperandStack->top();
  pOperandStack->pop();
  double param1 = pOperandStack->top();
  pOperandStack->pop();

  return param1 / param2;
}

Danke,
Shibby

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