programmieren-3-c/a1-4
Luca Conte 54f8f5dd3c rename results to readme 2023-10-04 15:34:46 +02:00
..
README.md rename results to readme 2023-10-04 15:34:46 +02:00
main.c a1-4 & a1-5 2023-09-27 21:48:10 +02:00
quadrat.c a1-4 2023-09-27 13:55:18 +02:00
quadrat.h a1-4 2023-09-27 13:55:18 +02:00

README.md

A1-4 Ergebnisse

Die main.o Datei enthält lediglich den Objektcode der main Funktion

Die quadrat Funktion ist nicht in der main.o Datei enthalten. Stattdessen gibt es eine Referenz auf die fehlende quadrat Funktion, die sich mit nm anzeigen lässt. Gleiches gilt für printf

$ nm main.o
                 U _GLOBAL_OFFSET_TABLE_
0000000000000000 T main
                 U printf
                 U quadrat

In dem Ordner /usr/include lässt sich die stdio.h Datei finden. Sie enthält den Funktionskopf der printf Funktion:

extern int printf (const char *__restrict __format, ...);

Anmerkung:

Hier lässt sich auch erkennen, warum printf(quadrat(x)) nicht die erwartete Ausgabe liefert. Die printf Funktion erwartet als erstes Argument stehts einen "string" (bzw char*). Ein Integer würde zu unerwartetem Verhalten führen.


Der Präprozessor hat also die stdio.h Datei automatisch gefunden und eingebunden.

Die Position der stdio.o Datei ist von Gerät zu Gerät unterschiedlich. Für gewöhnlich liegt sie in einem Archiv namens libc.a in einem Unterordner von /usr/lib

# Dateien im  Archiv auflisten, in der Liste nach stdio.o suchen

$ ar t /usr/lib/x86_64-linux-gnu/libc.a | grep -C1 ^stdio.o
...
stdfiles.o
stdio.o
strops.o
...

Wie sich erkennen lässt, ist die stdio.o Datei in dem Archiv vorhanden.


Der Linker hat nun sowohl die quadrat.o Datei, als auch die stdio.o Datei gefunden und eingebunden, um das die ausführbare Binärdatei zu erzeugen.