1. Why is static linking complicated? Because we want to 'reuse' libraries unmodified.
2. Why do we want to use libraries unmodified? Because libraries can get quite complex, and building them isn't always trivial.
3. Why are libraries complex to build? (Here I must resort to a weasel word.) Largely because we want to provide the ability to reuse libraries unmodified.
Oops, did I say root cause? We just have circular reasoning. I'm working on coming up with an alternative: https://lists.tildeverse.org/hyperkitty/list/tildeclub@lists...
 Dynamic linking has other values, like reducing memory requirements. But not static linking.
 Here's an example, about how Unix `cat` has gained bloat over time, purely out of compatibility concerns: https://news.ycombinator.com/item?id=11340510#11341175