Question: is the definition correct? If not, what should the correct definition be?
Here is the definition:
Dynamic linking is the process of resolving at runtime a program's external function calls or dependencies. It is usually performed at compile time by the linker.
This definition seems to be wildly incorrect - the second sentence, itself incorrect, contradicts the first.
The impression I am under regarding how things work in terms of binary creation and process creation can be summarized by the following (GCC + x86 Linux environment):
preprocessing -> compilation (compile time) -> assembly -> linking (link time)
execve (user space) -> exec (kernel) -> dynamic linker -> process (user space)
Since I don't know anything about dynamic linking in the context of other systems such as MS Windows and since the definition needs to be sufficiently generic, I am not in a position where I can suggest a new, correct and broadly applicable definition.
For reference, this question was prompted by some documentation I read over in order to answer Could not find ld-linux-x86-64.so.2 in strace output