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
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.
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
Welche libs linkst du denn dazu? Oliver
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 :)
Die Mathelib fehlt, und leider fügt das Studio die nicht automatisch hinzu. -lm Oliver
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
Project -> Configuration Options und dann zum Tab "Libraries" Da gibt es auch die libm. Die fügst du hinzu. Oliver
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.