Існують статичні бібліотеки (LIB) та динамічні бібліотеки (DLL) - але зауважте, що .LIB-файли можуть бути або статичними бібліотеками (містять об’єктні файли), або імпортними бібліотеками (містять символи, що дозволяють лінкеру зв’язатися з DLL).
Бібліотеки використовуються, оскільки у вас може бути код, який ви хочете використовувати в багатьох програмах. Наприклад, якщо ви пишете функцію, яка рахує кількість символів у рядку, ця функція буде корисною для багатьох програм. Після правильної роботи цієї функції вам не потрібно буде перекопіювати код кожен раз, коли ви його використовуєте, тому ви ставите виконуваний код для цієї функції в бібліотеку, і лінкер може витягнути і вставити скомпільований код у вашу програму . З цієї причини статичні бібліотеки іноді називають "архівами".
Динамічні бібліотеки роблять це на крок далі. Дуже марно мати кілька копій функцій бібліотеки, які займають місце в кожній з програм. Чому вони не можуть спільно використовувати одну копію функції? Це те, для чого створені динамічні бібліотеки. Замість того, щоб створювати код бібліотеки у вашій програмі під час її складання, її можна запустити, зіставивши її у вашу програму під час завантаження в пам'ять. Кілька програм, що працюють одночасно, які використовують одні і ті ж функції, можуть спільно використовувати одну копію, економлячи пам'ять. Насправді, ви можете завантажувати динамічні бібліотеки лише за потреби, залежно від шляху через ваш код. Немає сенсу в тому, щоб принтер розпоряджався пам'яттю, якщо ви не робите жодної друку. З іншого боку, це означає, що ви повинні мати копію динамічної бібліотеки, встановленої на кожній машині, на якій працює ваша програма.
Наприклад, майже для кожної програми, написаної на "C", знадобляться функції з бібліотеки під назвою "Бібліотека часу виконання C", хоча для декількох програм знадобляться всі функції. Час виконання C буває як у статичній, так і в динамічній версіях, тому ви можете визначити, яку версію використовує ваша програма залежно від конкретних потреб.