GCC: Zwischenschritte speichern
Um während der Kompilierung in GCC die Zwischenschritte, d.h. die Ausgabe des Präprozessors, den Assembler-Code sowie die Object-Files, permanent (statt lediglich temporär) zu speichern, wird während des Kompilierungsvorgangs die Option -save-temps gesetzt. Die Kompilierung einer Datei "helloworld.c" würde dann folgendermaßen aussehen:
gcc -save-temps -o helloworld helloworld.c
Was bedeuten die Kommandos und Paramter im Befehl?
Es werden folgende Dateien hierbei erstellt (Kommando: ls -l --time-style '+'
):
-rwxr-xr-x 1 user user 16576 helloworld -rw-r--r-- 1 user user 101 helloworld.c -rw-r--r-- 1 user user 15656 helloworld.i -rw-r--r-- 1 user user 1528 helloworld.o -rw-r--r-- 1 user user 451 helloworld.s
Folgende Dateien sind dabei von Bedeutung:
- helloworld ist die ausführbare Datei
- helloworld.c enthält den Source, der vom Entwickler geschrieben wurde
- helloworld.i enthält die Ausgabe des Präprozessors, hier sind z.B. alle defines, includes, etc. bereits aufgelöst
- helloworld.o ist die Objektdatei
- helloworld.s enthält den Assembler-Code
Appendix
Folgender Code wurde für dieses Tutorial verwendet:
helloworld.c
#include <stdio.h>
int main()
{
printf("Hello world!\n");
return 0; /* return code: success */
}