[c] woher kommen die Standardlibs

Gast #6881641
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
(Firma: matzetronics) #6881753
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'.
Persönliche Seite #6881772
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.
#6881775
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
Gast #6881839
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.
Gast #6881949
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.
#6881957
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/

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