Forum: Mikrocontroller und Digitale Elektronik [c] woher kommen die Standardlibs


von Beginner (Gast)


Lesenswert?

Hallo,

wirkt wahrscheinlich wie ein Troll Post, interessiert mich aber 
wirklich.

Meine frage bezieht sich eigentlich auf die Standard Librarys wie z.B. 
string.h oder stdlib.h. Hierbei egal ob von AVR-GCC oder GNU-GCC.

Die Funktion strlen() gibt die länge eines Strings zurück. Die 
Deklaration in string.h dabei sieht wie Folgt aus:
1
extern size_t strlen(const char *) __ATTR_PURE__;

Nun möchte ich aber gerne wissen wo der eigentliche C oder Assembler 
Code hinter dieser Funktion steckt.

Im Netz finde ich zwar Code ausschnitte von verschiedenen glibc 
Versionen aber wo finde ich das am PC? Installiert sind Atmel Studio 7 
und MinGW.

lg

von Stefan F. (Gast)


Lesenswert?

Beginner schrieb:
> Nun möchte ich aber gerne wissen wo der eigentliche C oder Assembler
> Code hinter dieser Funktion steckt.

https://www.nongnu.org/avr-libc/

Die Doku von Atmel/Microchip verweist übrigend ganz oben im ersten 
Absatz  darauf

https://onlinedocs.microchip.com/pr/GUID-317042D4-BCCE-4065-BB05-AC4312DBC2C4-en-US-2/index.html

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Bei einer Standardinstallation solltest du libc.a und z.B. auch libm.a 
(für mathematische Funktionen) finden in:
<Atmel Studio Basis>/7.0/toolchain/avr8/avr8-gnu-toolchain/avr/lib/

Die libc wird standardmässig eingebunden, das findest du in den 
Toolchain Einstellungen in den Projekteigenschaften (-lc). Freunde der 
mathematischen Funktionen binden dann noch libm ein (z.B. mit -lm) und 
includen 'math.h'.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Beginner schrieb:
> Hierbei egal ob von AVR-GCC oder GNU-GCC.

Das G in GCC bedeutet "GNU", also was ist "GNU-GCC" und was 
unterscheidet ihm vom AVR-GCC? Jedenfalls kann der GCC verschiedene 
C-Libraries nutzen, wie die glibc, avr-libc, newlib, musl-libc... Die 
C-Library ist häufig Teil eines Installationspakets (wie z.B. beim beim 
AVR-GCC oder GCC-ARM-Embedded), oder als Teil des Betriebssystems 
vorinstalliert. Überleg dir also wie die C-Library auf dein System 
gekommen ist und schau in der entsprechenden Dokumentation nach.

Andere Compiler wie der MSVC oder ARMCC benutzen wiederum ihre eigenen 
C-Libraries.

von Rolf M. (rmagnus)


Lesenswert?

Beginner schrieb:
> Im Netz finde ich zwar Code ausschnitte von verschiedenen glibc
> Versionen aber wo finde ich das am PC?

Das ist nicht ganz so einfach, denn die Funktionen müssen nicht zwingend 
aus der libc kommen. Ein nicht unerheblicher Teil der Standardfunktionen 
sind im Falle von gcc direkt im Compiler umgesetzt, darunter auch 
strlen(). Auf die Weise gibt es mehr Optimierungsmöglichkeiten, wie z.B. 
dass die Länge einer Stringkonstante nicht erst zur Laufzeit 
ausgerechnet werden muss.
Siehe 
https://gcc.gnu.org/onlinedocs/gcc-11.2.0/gcc/Other-Builtins.html#Other-Builtins

von Wolfgang (Gast)


Lesenswert?

Beginner schrieb:
> Hierbei egal ob von AVR-GCC oder GNU-GCC.

Es gibt nur einen GCC

von mh (Gast)


Lesenswert?

Wolfgang schrieb:
> Beginner schrieb:
>> Hierbei egal ob von AVR-GCC oder GNU-GCC.
>
> Es gibt nur einen GCC

Sollte es dann nicht auch "Es gibt nur eine GCC" heißen?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

mh schrieb:
> Sollte es dann nicht auch "Es gibt nur eine GCC" heißen?

Mittlerweile ja.

Früher: GCC = Gnu C Compiler

Mittlerweile: GCC = Gnu Compiler Collection

Da es hier aber keine Geschlechterunterteilung im Englischen gibt, ist 
es müßig, darüber zu diskutieren.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Beginner schrieb:
> Meine frage bezieht sich eigentlich auf die Standard Librarys wie z.B.
> string.h oder stdlib.h.

string.h oder stdlib.h sind keine Libraries, sondern lediglich Header, 
in denen das Interface zu den Library-Funktionen beschrieben wird.

Sonst siehe: https://de.wikipedia.org/wiki/C-Standard-Bibliothek

von mh (Gast)


Lesenswert?

Frank M. schrieb:
> mh schrieb:
>> Sollte es dann nicht auch "Es gibt nur eine GCC" heißen?
>
> Mittlerweile ja.
>
> Früher: GCC = Gnu C Compiler
>
> Mittlerweile: GCC = Gnu Compiler Collection
>
> Da es hier aber keine Geschlechterunterteilung im Englischen gibt, ist
> es müßig, darüber zu diskutieren.

Es gibt also mindestens 2 gcc? Hmmm ... Habe ich den gleichen oder den 
selben gcc wie Beginner (Gast)? Und ja, es ist sehr müßig.

von Dirk B. (dirkb2)


Lesenswert?

Beginner schrieb:
> Nun möchte ich aber gerne wissen wo der eigentliche C oder Assembler
> Code hinter dieser Funktion steckt.

Der muss nicht auf dem PC liegen.
Dafür ist ja die Library da, die den schon compilierten Code enthält.

von Rolf M. (rmagnus)


Lesenswert?

mh schrieb:
> Es gibt also mindestens 2 gcc?

Meinst du jetzt GCC oder wirklich gcc?

von Co-mpiler (Gast)


Lesenswert?

Dirk B. schrieb:
> Beginner schrieb:
>> Nun möchte ich aber gerne wissen wo der eigentliche C oder Assembler
>> Code hinter dieser Funktion steckt.
>
> Der muss nicht auf dem PC liegen.
> Dafür ist ja die Library da, die den schon compilierten Code enthält.

Das ist moeglicherweise der entscheidende Satz/Hinweis fuer den 
Fragesteller.

Eine Compilerinstallation (von GNU oder anderen) bringt i.a.R. die 
Standard-Libraries in vorkompilierter Form mit, damit man sich bei der 
Installation die Kopilationszeit fuer diese nicht geben muss. Um sie zu 
verwenden reichen dann die *.h-Dateien.
Entsprechend kann dann kein Quellcode dazu zu finden sein.

Wenn Du gut bist "im Programmieren", kanns Du ebenfalls deine Libraries 
vorkompiliert (+ *.h-Dateien) weiterreichen.

Nicht zuletzt erlaubt dies die Libraries mit anderen Optionen kompiliert 
zu haben als dein "Hauptprogramm".

Ausserdem sind mit Vorkompilate ermittelte Testergebnisse 
uneingeschraenkt gueltig. Umgekehrt: Testergebnisse gelten nur 
eingeschraenkt fuer anders (mit anderen Optionen) kompilierten 
Quellcode.

von Axel S. (a-za-z0-9)


Lesenswert?

Beginner schrieb:
> Meine frage bezieht sich eigentlich auf die Standard Librarys wie z.B.
> string.h oder stdlib.h.

Frank M. schrieb:
> string.h oder stdlib.h sind keine Libraries, sondern lediglich Header,
> in denen das Interface zu den Library-Funktionen beschrieben wird.

Danke, muß ich das nicht selber schreiben.

Rolf M. schrieb:
> Das ist nicht ganz so einfach, denn die Funktionen müssen nicht zwingend
> aus der libc kommen. Ein nicht unerheblicher Teil der Standardfunktionen
> sind im Falle von gcc direkt im Compiler umgesetzt

Dito.

Für andere Funktionen hat sich tatsächlich mal jemand hingesetzt und das 
in C (oder Assembler) geschrieben. Da die libc (traditioneller Name 
der C Standard Library) als Teil der Toolchain gesehen wird, also wohl 
dieselben Leute, die dir den Compiler, Linker etc. gegeben haben.

Der Quellcode der Library ist dabei nicht immer verfügbar. Gerade 
kommerzielle Toolchains enthalten die Libraries nur in compilierter 
Form. Bei der AVR-libc hast du bessere Karten, die ist frei. Siehe 
https://www.nongnu.org/avr-libc/

von Oliver S. (oliverso)


Lesenswert?


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.