Forum: Compiler & IDEs undefined reference to `asprintf'


von Peter S. (petershaw)


Lesenswert?

Hallo,

ich portiere gerade eine Routine von gcc nach avr-gcc.
Mein cu (gcc) test läuft super, bis ich das ganze dann unter avr-gcc 
übersetzen lasse.
Ich erhalte die Fehlermeldung: undefined reference to `asprintf'
Ich verwende avr-gcc (GCC) 4.6.2 und CrossPack for AVR Development 
20130212.

Gibt es kein asprintf unter avr oder habe ich nur vergessen etwas 
einzubinden?

Besten Dank,
ps

von Jörg E. (jackfritt)


Lesenswert?

Evtl hier ein ähnliches Problem?
Beitrag "AVR: undefined reference to `__muluhisi3'"

von Timmo H. (masterfx)


Lesenswert?

asprintf gibts bei avrgcc nicht. Nimm einfach sprintf

von Peter S. (petershaw)


Lesenswert?

Timmo H. schrieb:
> asprintf gibts bei avrgcc nicht. Nimm einfach sprintf

Hallo Timmo,
ja das wird dann die Lösung sein, aber so einfach geht das dann wohl 
nicht, denn asprintf reallociert ja noch Speicher. Beim String 
concatinieren eventuell nicht effizient aber im code ein wenig 
poetischer.

Ok, da ich es eh umschreiben muss, wie würdet ihr diese Funktion lösen: 
ich gebe ein leeres char* rein, innerhalb iteriert er über ein Baum und 
füllt das char *  in jeder Runde mit ein paar Werten. Nach dem aufruf 
der Funktion ist also die Übergebene Referenz mit einer Anzahl an 
Zeichen gefüllt, die ich vorher nicht kennen kann. Diese kann ich dann 
ausgeben (Display, UART, whatever).

Danke euch.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Timmo H. schrieb:
> Nimm einfach sprintf

Bzw. snprintf().  Im Prinzip kann man mit snprintf() auch ein
asprintf() emulieren, wenn man das unbedingt will:

. einmal snprintf mit einer Länge von 0 aufrufen,

. der Rückgabewert beschreibt die notwendige Länge,

. diese Länge wird mit malloc() alloziert,

. snprintf() wird noch einmal auf den Puffer aufgerufen.

von Peter S. (petershaw)


Lesenswert?

Ah ok,
Danke sehr. so wird es gehen.

Lieben Gruß und einen schönen Sonntag.
ps

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.