Forum: Mikrocontroller und Digitale Elektronik funktion funktioniert nicht - stdlib


von Mark (Gast)


Lesenswert?

Hallo

Ich versuche gerade die Fkt. atol() funktion zu verwenden.
Dafür habe ich die stdlib eingebunden.

#include <stdlib.h>
#include <string.h>
#include "stm32f0xx_hal.h"

Error: L6218E: Undefined symbol atol (referred from tim2.o).

Ich befürchte, dass irgend eine Einstellung in Keil v5 fehlt.
Unter Options for Target oder in File Extensions nicht finden. Kann es 
sein, dass es irgendwo versteckt ist?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Mark schrieb:
> Dafür habe ich die stdlib eingebunden.

Du hast nur die Headerdatei eingebunden.

Du muss schon auch die passende Library angeben, das geschieht bei den 
Linkeroptionen. Libraries heißen bei Deinem Compiler vermutlich *.a 
(oder *.lib).

Welche Library in Frage kommt, wirst Du der Dokumentation Deines 
Compilers entnehmen müssen, dort sollten die verschiedenen 
mitgelieferten Varianten beschrieben sein.

von Mark (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Mark schrieb:
>> Dafür habe ich die stdlib eingebunden.
>
> Du hast nur die Headerdatei eingebunden.
>
> Du muss schon auch die passende Library angeben, das geschieht bei den
> Linkeroptionen. Libraries heißen bei Deinem Compiler vermutlich *.a
> (oder *.lib).
>
> Welche Library in Frage kommt, wirst Du der Dokumentation Deines
> Compilers entnehmen müssen, dort sollten die verschiedenen
> mitgelieferten Varianten beschrieben sein.

Danke, ich habe in den Optionen nachgesehen.
Ich hatte den ARM Compiler mit default Einstellung als Compiler.
Nun habe ich den V5.06 update 4 eingestellt, V6.6 funktioniert nämlich 
irgendwie nicht.
Bei den Linkeroptionen kann ich irgendwie nichts angeben bezüglich der 
Library.

von Mark (Gast)


Angehängte Dateien:

Lesenswert?

Mark schrieb:
> Rufus Τ. F. schrieb:
>> Mark schrieb:
>>> Dafür habe ich die stdlib eingebunden.

>
> Danke, ich habe in den Optionen nachgesehen.
> Ich hatte den ARM Compiler mit default Einstellung als Compiler.
> Nun habe ich den V5.06 update 4 eingestellt, V6.6 funktioniert nämlich
> irgendwie nicht.
> Bei den Linkeroptionen kann ich irgendwie nichts angeben bezüglich der
> Library.

Hier noch die Bilder dazu, entschuldige mich.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was steht in der Dokumentation zu "Use Microlib"? Das ist bei Dir 
aktiviert ...

von Mark (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Was steht in der Dokumentation zu "Use Microlib"? Das ist bei Dir
> aktiviert ...

Rufus, entschuldige mich für meine dummen Fragen.
Was meinst du mit Dokumentation.
Wie kann ich da nachsehen, was darin steht?

Ich konnte nur das hier finden.
http://www.keil.com/arm/microlib.asp
Wenn ich auf den Link weiter unten klicke, kommt bei mir leider eine 
Error Meldung.

von Erklehr Behr (Gast)


Lesenswert?

Mark schrieb:
> Was meinst du mit Dokumentation.

Vermutlich meint er dass wenn die Microlib selektiert
ist, du eben nicht die stdlib eingebunden bekommst.

Das "Häkchen" setzen oder nicht musst du in deiner
Entwicklungsumgebung.

von Mark (Gast)


Lesenswert?

Erklehr Behr schrieb:
> Mark schrieb:
>> Was meinst du mit Dokumentation.
>
> Vermutlich meint er dass wenn die Microlib selektiert
> ist, du eben nicht die stdlib eingebunden bekommst.
>
> Das "Häkchen" setzen oder nicht musst du in deiner
> Entwicklungsumgebung.

Ich versuche es mal und mache das Häkchen weg.

von Arno (Gast)


Lesenswert?

Mark schrieb:
> Rufus Τ. F. schrieb:
>> Was steht in der Dokumentation zu "Use Microlib"? Das ist bei Dir
>> aktiviert ...
>
> Rufus, entschuldige mich für meine dummen Fragen.
> Was meinst du mit Dokumentation.
> Wie kann ich da nachsehen, was darin steht?

Ich bin zwar nicht Rufus, aber ich vermute, ihm geht es ähnlich wie mir: 
Er kennt den Keil-Compiler nicht, weiß aber generell, wie ein 
Compile-Link-Zyklus abläuft:

Von https://www.cprogramming.com/compilingandlinking.html

Linking refers to the creation of a single executable file from multiple 
object files. In this step, it is common that the linker will complain 
about undefined functions (commonly, main itself). During compilation, 
if the compiler could not find the definition for a particular function, 
it would just assume that the function was defined in another file. If 
this isn't the case, there's no way the compiler would know -- it 
doesn't look at the contents of more than one file at a time. The 
linker, on the other hand, may look at multiple files and try to find 
references for the functions that weren't mentioned.

Daher wundert er sich, dass in deinen Screenshots (anscheinend) keine 
Linker-Optionen eingestellt werden und das einzige, was halbwegs danach 
aussieht, als könnte es etwas beeinflussen (aber nicht eindeutig) ist 
eben die Option "Use Microlib". Und dann geht er davon aus, dass du den 
Keil-Compiler und die Entwicklungsumgebung nicht ganz ohne Dokumentation 
bekommen hast und daher dort nachsehen kannst, was dieser Schalter tut.

MfG,
Arno

P.S: Und nächstes Mal bitte den Screenshot nicht im bmp-Format posten, 
sondern etwas auswählen, was die Dateigröße sinnvoll reduziert. Siehe 
Bildformate.

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.