Un file lib viene letto dal linker e durante l'esecuzione viene utilizzato un file dll. Un file lib è essenzialmente inutile durante l'esecuzione e un linker non è in grado di leggere leggendo un file dll (tranne forse in un modo irrilevante qui).
Le differenze tra l'utilizzo di file lib per il collegamento statico e dinamico potrebbero creare confusione ma se si capisce un po 'di storia, allora diventa molto chiaro.
Originariamente c'erano solo le librerie statiche. Per una libreria statica, il file .lib contiene file obj. Ogni file obj è l'output di uno e un solo file di input del codice sorgente del compilatore. Un file lib è solo una raccolta di file obj correlati, proprio come mettere file obj in una directory. Questo è essenzialmente ciò che è un file lib, una libreria di file obj. Per un collegamento statico, tutti i file obj utilizzati da un eseguibile vengono riuniti in un unico file. Confrontalo con un collegamento dinamico in cui l'eseguibile si trova in un file separato dall'altro codice che usa.
Per implementare il collegamento dinamico, Microsoft ha modificato l'utilizzo dei file lib in modo tale che si riferiscano a un file dll anziché a posizioni in un file obj. Oltre a ciò, tutte le informazioni contenute in una libreria per un collegamento statico sono le stesse di un collegamento dinamico. Sono tutti uguali per quanto riguarda le informazioni in essi, tranne per il fatto che un file lib per un collegamento dinamico specifica il file dll.
Si potrebbe notare che la domanda riguarda la piattaforma MS Windows. – cubuspl42