Введение

Статическая сборка — это скомпилированная версия программы, в которой библиотеки статически подключены.

Связывание

В информатике связывание означает объединение одного или нескольких объектных файлов, сгенерированных компиляторами, в единую исполняемую программу. Объектные файлы – это программные модули, содержащие машинный код и определения символов, которые бывают двух типов: Определённые или экспортируемые символы – это функции или переменные, присутствующие в модуле, представленном объектным файлом, и предназначенные для использования другими модулями. Неопределённые или импортируемые символы – это функции или переменные, вызываемые или на которые ссылается данный объектный файл, но не определённые внутри него. Программа-связчик (линкер) разрешает ссылки на неопределённые символы, определяя, какой другой объектный файл содержит определение нужного символа, и заменяя заполнители адресом этого символа. Линкеры могут использовать объектные файлы из коллекции, называемой библиотекой. В конечную программу включаются не все объекты из библиотеки, а только те, которые необходимы. Существуют библиотеки для различных целей, и одна или несколько системных библиотек обычно подключаются по умолчанию.

Статика

В статически скомпилированной программе динамическая линковка не происходит: все связи устанавливаются на этапе компиляции. Статические сборки обладают очень предсказуемым поведением (поскольку они не зависят от конкретной версии библиотек, доступных в целевой системе), и часто используются в криминалистических и средствах обеспечения безопасности, чтобы избежать возможного заражения или сбоев из-за неисправных библиотек на анализируемой машине. Та же гибкость, которая позволяет обновлённой библиотеке быть использованной всеми приложениями, использующими динамическую линковку, может также препятствовать корректной работе приложений, требующих наличия определённой версии конкретной библиотеки. Если каждому приложению в системе требуется собственная копия динамической библиотеки для обеспечения корректной работы, преимущества динамической линковки теряют смысл. Другим преимуществом статических сборок является их переносимость: после компиляции окончательного исполняемого файла, хранить файлы библиотек, на которые ссылается программа, больше не требуется, так как все необходимые компоненты копируются непосредственно в исполняемый файл. В результате, при установке статически скомпилированной программы на компьютер, пользователю не нужно скачивать и устанавливать дополнительные библиотеки: программа готова к запуску.