Implizite Deklaration der Funktion »itoa«. Ich finde den Fehler nicht.

Gast #4036545
Lesenswert?

Hallo,

ich finde den Fehler nicht. Ich versuche, ein kleines C-Programm zu 
kompilieren. Es soll den ADC auslesen und den Wert auf einem LCD 
ausgeben. Beim kompilieren (ich benutze Code::Blocks) erscheint folgende 
Fehlermeldung:

###Anfang Fehlermeldung###
-------------- Build: Debug in lcdtest1 ---------------

Compiling: main.c
main.c: In Funktion »main«:
main.c:27: Warnung: Implizite Deklaration der Funktion »itoa«
Linking console executable: bin/Debug/lcdtest1.elf
/usr/lib/gcc/avr/4.3.4/../../../avr/bin/ld: skipping incompatible 
/usr/lib/libm.so when searching for -lm
/usr/lib/gcc/avr/4.3.4/../../../avr/bin/ld: skipping incompatible 
/usr/lib/libm.a when searching for -lm
/usr/lib/gcc/avr/4.3.4/../../../avr/bin/ld: skipping incompatible 
/usr/lib/libc.so when searching for -lc
/usr/lib/gcc/avr/4.3.4/../../../avr/bin/ld: skipping incompatible 
/usr/lib/libc.a when searching for -lc
Output size is 12,96 KB
Running project post-build steps
avr-objcopy -O ihex -R .eeprom -R .eesafe bin/Debug/lcdtest1.elf 
bin/Debug/lcdtest1.elf.hex
avr-objcopy --no-change-warnings -j .eeprom --change-section-lma 
.eeprom=0 -O ihex bin/Debug/lcdtest1.elf bin/Debug/lcdtest1.elf.eep.hex
Process terminated with status 0 (0 minutes, 0 seconds)
1 errors, 0 warnings
###Ende Fehlermeldung###

Ich bin überzeugt, alle relevanten Dateien korrekt eingebunden zu haben. 
Was mich ebenfalls wundert, ist die immense Größe der erzeugten 
HEX-Datei von über 5 kB.
Angehängte Dateien:
Moderator #4036587
Lesenswert?

Die Suchpfade für Header-Files und Libraries zeigen fälschlicherweise
auf die Verzeichnisse /usr/include und /usr/lib, die für PC-Programme da
sind. Die erste Meldung wird ausgegeben, weil es im stdlib.h unter Linux
kein itoa gibt. Der Linker meckert, weil die Libraries im Objektformat
für x86 o.ä. statt für AVR sind.

Wenn der AVR-GCC und die AVR-Libc richtig installiert sind, sollte das
Programm ohne Warnungen bauen, es sei denn, du gibst die Pfade explizit
(mit -I und -L) falsch an.
Gast #4036751
Lesenswert?

J.-u. G. schrieb:
> "itoa" möchte als ersten Parameter einen Integer haben. Du hast
> "ergebnis" als "double" deklariert.

Ok. Habe ich korrigiert, hat allerdings keine Besserung gebracht.

Alexander F. schrieb:
> Ausführbarer Code gehört außerdem nicht in Header, sondern in Source
> Files.

Ich weiß. Müsste sich aber doch zum Testen trotzdem kompilieren lassen.

Alexander F. schrieb:
> Welches Betriebssystem verwendest du?

Momentan Ubuntu 10.04LTS

Yalu X. schrieb:
> Die Suchpfade für Header-Files und Libraries zeigen fälschlicherweise
> auf die Verzeichnisse /usr/include und /usr/lib, die für PC-Programme da
> sind. Die erste Meldung wird ausgegeben, weil es im stdlib.h unter Linux
> kein itoa gibt. Der Linker meckert, weil die Libraries im Objektformat
> für x86 o.ä. statt für AVR sind.

Danke! Das was es! Habe die Pfade auf das AVR-Verzeichnis gesetzt. Jetzt 
verschwindet auch die Fehlermeldung zur impliziten Deklaration. Wie 
kommt man denn auf so etwas? Ist es das, was man als Erfahrung 
bezeichnet oder habe ich irgendwo gepennt?
Moderator #4036858
Lesenswert?

Programmieranfängeranwärter schrieb:
> Habe die Pfade auf das AVR-Verzeichnis gesetzt. Jetzt verschwindet
> auch die Fehlermeldung zur impliziten Deklaration. Wie kommt man denn
> auf so etwas? Ist es das, was man als Erfahrung bezeichnet oder habe
> ich irgendwo gepennt?

Normalerweise solltest du für die Standardbibliothek und die zugehörigen
Header-Files überhaupt keine expliziten Pfade setzen müssen, da diese
schon im Compiler und Linker als Default einprogrammiert sind.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren