In computer science, linking means taking one or more objects generated by compilers and assembling them into a single executable program.
Modern operating system environments allow dynamic linking, or the postponing of the resolving of some undefined symbols until a program is run.
That means that the executable still contains undefined symbols, plus a list of objects or libraries that will provide definitions for these.
Static builds have a very predictable behavior (because they do not rely on the particular version of libraries available on the final system), and are commonly found in forensic and security tools to avoid possible contamination or malfunction due to broken libraries on the examined machine.
The same flexibility that permits an upgraded library to benefit all dynamically-linked applications can also prevent applications that assume the presence of a specific version of a particular library from running correctly.