They are really two terms for the same thing.
In the Unix world, the term dynamic linker is used to denote the component of the operating system which links dynamic libraries at runtime, whereas a loader on most other systems does both program loading and linking dynamic libraries.
Because loading libraries under Unix-like systems is done by a separate component (ld.so
most often), a dynamic linker is considered something distinct from the program loader. Compilers usually insert some stub code in the beginning of the executable to load ld.so
, and ld.so
would continue loading the rest of the dependent libraries before main
is invoked. While program loading is done in kernelspace, linking dynamic libraries is usually done in userspace.
This is unlike Windows, where both program loading and linking dynamic libraries is done in kernel mode.