Программисты часто обнаруживают, что у них есть некоторый код, который они хотели бы использовать в нескольких программах, или код, который они хотели бы позволить другим программистам использовать. Они могут копировать и вставлять логику в каждую программу или помещать логику в общий заголовок и файлы реализации, которые они включают в каждый проект. Ни один из этих подходов не является ужасно элегантным (или эффективным).
Статические библиотеки являются одним из способов обмена логикой, чтобы другие программы и программисты могли использовать ее. Статическая библиотека - это двоичный файл (часто с расширением .LIB), подходящий для ввода в компоновщик. Программист использует статическую библиотеку, написав код для вызова одной или нескольких функций, реализованных в статической библиотеке, и организуя для компоновщика чтение этого файла статической библиотеки в качестве дополнительного ввода. Во время сборки компоновщик разрешит все ссылки, включая ссылки на функции, реализованные в статической библиотеке. Часто статическая библиотека соединяется с файлом заголовка, который описывает функции, реализованные в библиотеке.
Динамические библиотеки ссылок - это еще один способ поделиться логикой. Динамические библиотеки также являются двоичными файлами (часто с расширением .DLL). В отличие от статических библиотек, библиотеки DLL не используются в качестве входных данных для компоновщика. Вместо этого библиотеки DLL загружаются динамически во время выполнения программы. Библиотеки DLL могут быть явно загружены вызовами LoadLibraryEx и GetProcAddress или неявно загружены при загрузке программы-потребителя.