- If you link against a shared binary in the static library code, the linker has no way of incorporating it, thus creating references exactly like these you have in a dynamic library.
- When you want to change something in a statically linked code, you have to rebuild the whole thing.
- (Especially in Linux/Unix) The code is really shared(!), meaning a lot of applications use the same binary, changes in that binary propagate to all and additionally there is only one copy of each one binary unit.
- A person should ensure binary compatibility of the library as to be able to change the implementation without rebuilding the user applications. This could be quite a bit of work, especially for people who don't have a good set of habits for doing it.
- You should ensure all the dependencies are in a place known to the loader.
- Resolving of symbols may be done by the runtime as it is in Linux/UNIX.
- The library interface and exports should be enforced, as in Linux/UNIX by default all symbols are exported, while in Windows none of them are.