Static libraries can't be converted to shared because all shared library code on x86 needs to be compiled with the -fPIC (position-independent code) flag.
Shared libraries could be converted to static. You would lose the ability of static libraries to only include part of the library.
You can make a shared library without PIC, however most *nix systems no longer allow that and try to prevent it in various ways.
Windows in 16 and 32bit code defaults to non-PIC code and thus considerable work has been done to ensure system libraries do not overlap in addresses.
What happens when addresses overlap? When runtime linker detects conflicts (or just wants to load a non-PIC library/executable at different address), it utilizes "relocation data" that is shipped with the code which contains essentially information on "where are pointers and how to rewrite them when you move the code"
Shared libraries could be converted to static. You would lose the ability of static libraries to only include part of the library.