Here's my understanding of how the static libraries work. Please correct me if I'm wrong.
Static library files (.a) are 'archives' of the object files that were compiled (.o). You can think of a .a file as tarball of the .o files. When the linker uses this library, you can think of it like extracting the tarball back to object .o files, then only linking the object files you need into the final binary.
Here's an example.
sourceA.c contains FunA1() and FunA2().
sourceB.c contains FunB()
The library file source.a contains sourceA.o and sourceB.o.
The user is ONLY USING FunA1() from the library. Since the sourceA.o is needed, the entire object files contents ends up in the final binary, even though FunA2() isn't actually needed. Nothing from SourceB.o was needed, so FunB() will not end up in the binary.
Thus, when designing a static library, think about how you break up the functions into source files if you are concerned about the size of the final binary.