wikipedia says (modified) —
Originally, only static libraries existed. Dynamic linking involves loading the subroutines of a library (DLL or *.so) into an application program at load time or runtime, rather than linking them in at compile time.
Dynamic libraries …. allowing the same disk file to be used by multiple running programs at the same time. Static library disk files, by definition, cannot be shared — it has to be bitwise “copied” into each executable.
When linking against .lib file in Windows one must first know if it is a regular static library or an import library. In the latter case, a .DLL file must be present at runtime.
A something.dll.a file is a MinGW static-import-library for the associated something.dll file – the equivalent of Visual Studio’s .lib static import libraries for linking to DLLs