John R. Levine’s book Linkers and Loaders remains the only comprehensive coverage on the topic. You can get the manuscript proofs for free on the author’s website:
It has an introduction section on what is a linker and why you need one. The gist is, linker is the piece of software that puts together different source file, be it at compile time or runtime. So, the faster is your linker the quicker the app compiles and opens.
Individual compilation units (ex: .o files built from .c files) hold references (ex: from .h files) to other compilation units. In order to assemble a full executable, a linker takes all these individual units and links them together.
To assemble executable code from separately compiled files. Or to tell your executable code from where other executable code it needs can be loaded at runtime.
https://www.iecc.com/linker/
The Solaris Linkers and Libraries docs are very good and mostly relevant to Linux, with fewer distractions about Windows:
https://docs.oracle.com/cd/E37838_01/html/E36783/index.html