Istnieją biblioteki statyczne (LIB) i biblioteki dynamiczne (DLL) - należy jednak pamiętać, że pliki .LIB mogą być bibliotekami statycznymi (zawierającymi pliki obiektowe) lub bibliotekami importowymi (zawierającymi symbole umożliwiające linkerowi połączenie z biblioteką DLL).
Biblioteki są używane, ponieważ możesz mieć kod, którego chcesz używać w wielu programach. Na przykład, jeśli napiszesz funkcję, która liczy liczbę znaków w ciągu, funkcja ta będzie przydatna w wielu programach. Po uzyskaniu prawidłowego działania tej funkcji nie trzeba ponownie kompilować kodu za każdym razem, gdy go używasz, więc umieść kod wykonywalny dla tej funkcji w bibliotece, a linker może wyodrębnić i wstawić skompilowany kod do programu . Z tego powodu biblioteki statyczne są czasami nazywane „archiwami”.
Biblioteki dynamiczne posuwają się o krok dalej. Wydaje się niepotrzebne, aby wiele kopii funkcji biblioteki zajmowało miejsce w każdym z programów. Dlaczego nie wszyscy mogą udostępniać jedną kopię funkcji? Po to są biblioteki dynamiczne. Zamiast kompilować kod biblioteki w programie podczas kompilacji, można go uruchomić, mapując go do programu podczas ładowania do pamięci. Wiele programów działających jednocześnie z tymi samymi funkcjami może współużytkować jedną kopię, oszczędzając pamięć. W rzeczywistości biblioteki dynamiczne można ładować tylko w razie potrzeby, w zależności od ścieżki w kodzie. Nie ma sensu zajmować pamięci przez procedury drukarki, jeśli nie drukujesz. Z drugiej strony oznacza to, że musisz mieć kopię biblioteki dynamicznej zainstalowaną na każdym komputerze, na którym działa Twój program.
Na przykład prawie każdy program napisany w „C” będzie potrzebował funkcji z biblioteki zwanej „biblioteką wykonawczą C”, chociaż niewiele programów będzie potrzebowało wszystkich funkcji. Środowisko wykonawcze C jest dostępne zarówno w wersji statycznej, jak i dynamicznej, dzięki czemu można określić, z której wersji korzysta program w zależności od konkretnych potrzeb.