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