- The format of dynamic libraries, loaded at run-time, is determined by the operating system writers. The format of static libraries is set by the tool chain writers. Often there is some overlap between those classes of programmers, but they tend to prefer maintaining separation of concerns.
- The run-time loader needs to know the size of the image to load, maybe some stack and data segment sizes and the names and entry points of the functions in the DLL. The linker needs to know a great deal more about each of the objects (functions/data) archived in a static library. Things like function signatures, data types, sizes of things, initialization, scope of access.
Every OS and tool chain has it's own specific requirements and revision history, so it would not be practical to delineate exact file layouts for all of them here. Refer to the OS and tool chain documentation for details.