Before a compiled program can run, several separate pieces, such as the program's own compiled code and any library routines or other object modules it depends on, usually need to be combined into a single executable file. This combining process is carried out by a linker.
The linker's job is to link the program with other programs it needs for execution, it resolves references between separate object files and library code, and joins them together so that when the program calls a function defined elsewhere, the correct code is connected to that call.
Placing a program into memory for execution is the job of a loader, relocating a program to run from a specific memory area is a task carried out during loading or relocation rather than linking, and interfacing a program with entities that generate its input data describes an input or output function, not what a linker does, only combining a program with the other program modules it depends on describes the linker's actual role.
Exam tip: keep the linker, which joins separate program modules together before execution, distinct from the loader, which places the finished executable into memory to run.