Compilation of a C program is a multi-stage process. This process is described below.
- A compiler is a software program that transforms high-level source code that is written by a developer in a high-level programming language into a low-level object code (binary code) in machine language, which can be understood by the processor. A compiler translates the code written in one language to some other language without changing the meaning of the program.
- Example: GCC Compiler
- A program that takes one or more object codes generated by the compiler and combines them into a single executable program. It links the object codes of library routines to the object code of the source program and converts them into an executable form (.exe).
- In high-level languages, some built-in header files or libraries are stored. These libraries are predefined and these contain basic functions which are essential for executing the program. These functions are linked to the libraries by a program called Linker. If linker does not find a library of a function then it informs to the compiler and then the compiler generates an error. The compiler automatically invokes the linker as the last step in compiling a program. It also links the user-defined functions to the user-defined libraries. Usually, a longer program is divided into smaller subprograms called modules. And these modules must be combined to execute the program. The process of combining the modules is done by the linker.
- Part of an operating system responsible for loading executable files from disk memory to main memory, preparing them for execution and then executing them.
- A loader is a program that loads machine codes of a program into the system memory. In Computing, a loader is the part of an Operating System that is responsible for loading programs. It is one of the essential stages in the process of starting a program. Because it places programs into memory and prepares them for execution. Loading a program involves reading the contents of an executable file into memory. Once loading is complete, the operating system starts the program by passing control to the loaded program code. All operating systems that support program loading have loaders. In many operating systems the loader is permanently resident in memory.
- A computer will not understand any program written in a language, other than its machine language. The programs written in other languages must be translated into the machine language. Such translation is performed with the help of software. A program which translates an assembly language program into a machine language program is called an assembler. If an assembler which runs on a computer and produces the machine codes for the same computer then it is called self-assembler or resident assembler. If an assembler that runs on a computer and produces the machine codes for another computer then it is called Cross Assembler.