When a program is compiled with dynamic linking enabled, parts of the program which come from libraries are not copied into the executable. Instead they are loaded when the program is run. This is dynamic linking. Dynamic linking allows there to be a single, central copy of commonly used functions, instead of one copy in the executable for each program. This saves disk space, reduces memory usage and helps ease system maintenance (although it does have its own problems).
If you come from a Windows environment, this is what .dll files provide - those parts which can be dynamically loaded at runtime. In Linux these are .so files.
Have a read of the ld.so manual page, which gives an overview.
If you want a lot more detail, have a read about
ELF.