# 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.