- Run preprocessor to proces preprocessor statements; e.g., #include statements to get a file ex1.i
- Run the compiler on ex1.i to get an "assembler" file ex1.s containing symbolic machine instructions, but not the code for library functions - printf and scanf.
- Run the assembler on ex1.s to get an object file ex1.o of machine instruction where instruction names are replace by numeric codes and labels are replaced by addresses or offsets.
- Run the linker on ex.o to combine it with the object files in the c library to get an executable file ex1.
All steps are handled by the gcc script. In spite of there being mulitple steps, gcc is usually referred to as the compiler.