When loading programs into memory, what is the difference between load-time dynamic linking and run-time dynamic linking?
Aiden Bell covered the fundamentals, but I'll add:
Load time dynamic linking is usually accomplished by statically linking your application to a .lib or .a file that contains the code for automatically establishing runtime links to symbols to be found in .dll or .so files at program startup. This is usually for fixed functionality (i.e. the C runtime library, etc.) and allows your program to reap the benefits of bug fixes in the libraries while keeping executable size small (by factoring common code into a single library).
Runtime linking is used for more dynamic functionality such as plugin loading. As Aiden said, you use LoadLibrary() or the equivalent to actively attach modules to your program at runtime, perhaps by interrogating a directory containing plugin DLLs, loading each one in turn and talking to it with a homegrown plugin API. By doing so, your program can load modules that did not even exist when your app was compiled/linked, and can thus grow organically after deployment.
Fundamentally both methods end up invoking the LoadLibrary() API, but using a fixed set of symbols and libraries in the former case and a more dynamic set in the latter.