Answer: D
Correct answer: A program may fail if the required library version is changed or missing
With dynamic linking the library is not bound into the executable but located at run time, so a program depends on finding a compatible version present on the system. If the library is missing, moved or replaced by an incompatible version, the program fails to run - the difficulty known informally as dependency hell. Its advantages are substantial, which is why it is universal. Executables are far smaller, since library code is not duplicated into each. One copy of a library in memory serves every process using it, mapped into each address space. And a library can be patched - for a security fix, say - and every program benefits without relinking. Version management is handled by numbering, so several versions can coexist and each program binds to the one it needs. Static linking avoids the dependency entirely by copying the library in, at the cost of size and of losing the shared updates. That is why it is still chosen for self-contained or embedded software.