[compiler-construction] What is compiler, linker, loader?
- A compiler reads, analyses and translates code into either an object file or a list of error messages.
- A linker combines one or more object files and possible some library code into either some executable, some library or a list of error messages.
- A loader reads the executable code into memory, does some address translation and tries to run the program resulting in a running program or an error message (or both).
[Source Code] ---> Compiler ---> [Object code] --* | [Source Code] ---> Compiler ---> [Object code] --*--> Linker --> [Executable] ---> Loader | | [Source Code] ---> Compiler ---> [Object code] --* | | | [Library file]--* V [Running Executable in Memory]
I wanted to know in depth meaning and working of compiler, linker and loader. With reference to any language preferably c++.
- Compiler : Which convert Human understandable format into machine understandable format
- Linker : Which convert machine understandable format into Operating system understandable format
- Loader : is entity which actually load and runs the program into RAM
Linker & Interpreter are mutually exclusive Interpreter getting code line by line and execute line by line.
It will read source file which may be of type .c or .cpp etc and translates that to .o file called as object file.
It combines the several .o files which may be generated for multiple source files into an executable file (ELF format in GCC). There are two type of linking:
- static linking
- dynamic linking
A program which loads the executable file to the primary memory of the machine.
For an in-detail study about the these three stages of program execution in Linux, please read this.
Compiler :it is a system software which correct the error of programs,object file ,messages etc
Linker:it is a system software which combines One or more objectfiles and possible some library code into either some exicutable some library or a list of error
Loader: A program which loads the executable file to the primary memory of the machine
Compiler: It is a program which translates a high level language program into a machine language program. A compiler is more intelligent than an assembler. It checks all kinds of limits, ranges, errors etc. But its program run time is more and occupies a larger part of the memory. It has slow speed. Because a compiler goes through the entire program and then translates the entire program into machine codes. If a compiler runs on a computer and produces the machine codes for the same computer then it is known as a self compiler or resident compiler. On the other hand, if a compiler runs on a computer and produces the machine codes for other computer then it is known as a cross compiler.
Linker: 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 compiler and then compiler generates an error. The compiler automatically invokes the linker as the last step in compiling a program. Not built in libraries, 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.
Loader: 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 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.
Operating System: An operating system (OS) is system software that manages computer hardware and software resources and provides common services for computer programs. The operating system is a component of the system software in a computer system. Application programs usually require an operating system to function.
Compiler: A compiler is a computer program (or a set of programs) that transforms source code written in a programming language (the source language) into another computer language (the target language), with the latter often having a binary form known as object code.
Interpreter: interpreter is a computer program that directly executes, i.e. performs, instructions written in a programming or scripting language, without previously compiling them into a machine language program.
Assembler: An assembler is a program that takes basic computer instructions and converts them into a pattern of bits that the computer's processor can use to perform its basic operations.
Loader: a loader is the part of an operating system that is responsible for loading programs and libraries. It is one of the essential stages in the process of starting a program, as it places programs into memory and prepares them for execution.
Linker: linker is a program that combines object modules to form an executable program.
Preproccesor: Preproccesor is a text substitution tool and it instructs the compiler to do required pre-processing before the actual compilation.
A compiler is a special program that processes statements written in a particular programming language and turns them into machine language or "code" that a computer's processor uses