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

Gast #1476757
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
#1477461
libc ist die Standard C-Lib die zu jeden Compiler gehört. Dazu gehören 
die ganzen IO-Funktionen wie printf usw.
Eigentlich ist das immer libgcc, aber vielleicht hat sich das bei deiner 
Version geändert. Hast du mal im AVR-GCC Verzeichnis geguckt ob bei da 
drin sind.
Gast #1479093
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
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
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

Eine eigene Frage? Dieser Thread ist über 16 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.