Hallo, ich habe bisher mit GCC 3.4 gearbeitet (Nios II). In meinem System habe ich einen Koprozessor, der Double +-*/ rechnet. Um diesen einzubinden, habe ich einen Treiber geschrieben, der die selben Funktionsnamen wie in der libgcc verwendet (z.b. double __adddf3 (double, double);). Das hat dann dazu geführt, dass der Linker die lokale (von mir geschriebene) Funktion benutzt hat anstatt der libgcc-Softwarefloat-Routine. Jetzt bin ich gezwungen, meine Toolchain auf GCC 4.1 umzustellen. Leider scheint der Linker dort die lokale Funktion nicht mehr einzubinden und verwendet ausschliesslich die in der libgcc hinterlegte. Selbst ein direkter Aufruf von __adddf3() ruft die falsche Funktion auf. Nur wenn ich die Funktion umbenenne kann ich sie überhaupt aufrufen, jedoch wird dann a = b + c; leider nicht mehr automatisch ersetzt wie bislang. Nachdem ich jetzt nach einem Tag suchen und probieren nicht weiterkomme, hoffe ich dass mir von euch jemand ein paar Hinweise dazu geben kann!
[Ohne Garantie] ich würde meine Funktionen in eine lib packen und dem gcc als letztes übergeben. gcc ......... -lgcc -lmymath [/Ohne Garantie]
Eventuell hilft die Option -nostdlib. Dann musst du zwar die libgcc.a manuell mit -lgcc dazulinken, aber das sollte dann wirklich wie eine normale Library funktionieren. Ich glaube, der aktuelle gcc umgeht für interne und Standard-C Bibliotheksfunktionen die normalen Wege und verarbeitet die Aufrufe direkt, um besser zu optimieren.
... schrieb: > ..und in C++ wärs so schön einfach... Mit C++ ist's der absolute Krampf. Beispiel: Ein nicht-POD in den Flash legen als Lookup-Tabelle. Viel Spaß.
Die Option mit -nostdlib habe ich ausprobiert, hat aber nicht geholfen. Gestern habe ich im Laufe des Tages die source-Datei mit dem Treiber von .c nach .cpp umbenannt. Nachdem ich sie heute wieder zurück in .c benannt habe, funktioniert das ganze jetzt wie gewünscht. Warum das jetzt allerdings ein Problem war, kann ich nicht nachvollziehen. Im Makefile war die Datei immer korrekt mit drin und die Optionen waren sonst unverändert. Vielen Dank trotzdem für eure Hilfe!
In dem Falle ist das Ergebnis abhängig vom Makefile selbst. Ist diese Abhängigkeit beschrieben? Ansonsten ist erst ein "make clean" o.ä. erforderlich.
Johann L. schrieb: > In dem Falle ist das Ergebnis abhängig vom Makefile selbst. Ist diese > Abhängigkeit beschrieben? Wie meinst du das? make clean habe ich grundsätzlich nach allen Änderungen ausgeführt. Ich halte es für unwahrscheinlich, dass mein Problem damit zu tun hatte.
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.