Forum: Compiler & IDEs Library-Funktion durch eigene Funktion ersetzen


von Walter T. (nicolas)


Lesenswert?

Hallo zusammen,

das von mir für die Anpassung alter AVR-Projekte bevorzugte Atmel Studio 
7 nutzt standardmäßig den AVR-GCC 4.8.1. Damals habe ich eine Funktion 
für wasnprintf_P geschrieben, die die gleiche Signatur wie die 
eingebaute Funktion snprintf_P hat, um einen Fehler zu umgehen. 
Anschließend wurde jeder Aufruf von snprintf_P in der 
Entwicklungsumgebung gesucht und durch wasnprintf_P ersetzt.

Sprung in die Gegenwart: Compiler und Entwicklungsumgebung sind gleich 
geblieben. Allerdings erscheint mir die damalige Vorgehensweise 
("aufpassen, dass ich statt Funktion A immer Funktion B verwende") 
mittlerweile ziemlich umständlich und fehlerträchtig.

Gibt es einen weniger fehlerträchtigen Weg, statt einer Library-Funktion 
eine eigene Funktion mit der gleichen Signatur zu verwenden?

Viele Grüße
W.T.

von Frühaufsteher (Gast)


Lesenswert?

Ja das sollte mit dem Linker Flag "wrap" gehen. Alternativ Quick and 
Dirty mit einem Makro. Selber aber noch nie gemacht.

Bei einer schnellen Suche das hier dazu gefunden: 
https://stackoverflow.com/a/617606

von foobar (Gast)


Lesenswert?

Wenn das Library anständig aufgebaut ist, befindet sich die Funktion 
wasnprintf_P in einer eigenen Datei (innerhalb des Libraries). Dann 
reicht es, deine eigene Version einfach explizit mitzulinken - die aus 
dem Library wird dann nicht genommen.

von Walter T. (nicolas)


Lesenswert?

foobar schrieb:
> Wenn das Library anständig aufgebaut ist, befindet sich die Funktion
> wasnprintf_P in einer eigenen Datei (innerhalb des Libraries).

Ich gehe davon aus, dass die snprintf_P, die durch die Funktion, die 
momentan wasnprintf_P heisst, ersetzt werden soll, Teil der libm.a ist.

von foobar (Gast)


Lesenswert?

Upps, ja, sorry, sollte snprintf_P heißen.

von guest (Gast)


Lesenswert?

Walter T. schrieb:
> Ich gehe davon aus, dass die snprintf_P, die durch die Funktion, die
> momentan wasnprintf_P heisst, ersetzt werden soll, Teil der libm.a ist.

Eher in der libc.a.

von Peter D. (peda)


Lesenswert?

Zuerst werden die Projektlibs gelinkt und als letztes die Standardlibs.
Ich hab so z.B. beim WINAVR die 64-Bit Funktionen ersetzt, da die sehr 
ineffizient waren (~5kB Flash).

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
Noch kein Account? Hier anmelden.