1.5 KiB
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.