The linker combines executable files and shared libraries into a runnable program. It searches library paths and the binary's RUNPATH for needed shared libraries by name. The RUNPATH is set during compile-time linking with the -R option. At runtime, the dynamic linker (ld.so.1) uses information in the binary like the NEEDED tags and RUNPATH to locate and load the required libraries when the program starts. Various debugger tools like dump, lari, and pldd can show the shared library dependencies and runtime linking information.