It is an import library, which contains definitions of exports, that resides inside DLL
and name of that DLL
(*).
You can use LIB
with the /DEF
option to create an import library and an export file. LINK
uses the export file to build a program that contains exports (usually a dynamic-link library (DLL
)), and it uses the import library to resolve references to those exports in other programs.
And also:
In most situations, you do not need to use LIB
to create your import library. When you link a program (either an executable file or a DLL
) that contains exports, LINK
automatically creates an import library that describes the exports. Later, when you link a program that references those exports, you specify the import library.
Dynamic libraries are loaded at runtime (on application startup) - linker does not check where some particular symbol resides in DLL
. Header
says __dllimport
- "this symbol is an extern, it should be imported from somewhere". Lib
says "I know where this symbol is - it resides in XXX.dll
, so look there after startup".
(*) I saw a lot of people, that were trying to change names of .lib
and corresponding .dll
and expected, that it will work. Contents of .lib
is the reason why it didn't.