Статическая сборка

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

Связывание

В информатике связывание означает взятие одного или нескольких объектов, сгенерированных компиляторами , и сборку их в одну исполняемую программу. Объекты представляют собой программные модули, содержащие машинный код и определения символов , которые бывают двух видов:

  • Определенные или экспортированные символы — это функции или переменные , которые присутствуют в модуле, представленном объектом, и которые должны быть доступны для использования другими модулями.
  • Неопределенные или импортированные символы — это функции или переменные, которые вызываются или на которые ссылается данный объект, но не определены внутри.

Затем программа -линкер разрешает ссылки на неопределенные символы, выясняя, какой другой объект определяет рассматриваемый символ, и заменяя заполнители адресом символа. Линкеры могут брать объекты из коллекции, называемой библиотекой . Окончательная программа включает не всю библиотеку, а только те объекты из нее, которые необходимы. Существуют библиотеки для различных целей, и одна или несколько системных библиотек обычно связаны по умолчанию.

Динамическое связывание

Современные среды операционных систем допускают динамическое связывание или отсрочку разрешения некоторых неопределенных символов до запуска программы. Это означает, что исполняемый файл все еще содержит неопределенные символы, а также список объектов или библиотек, которые предоставят определения для них. Загрузка программы загрузит также эти объекты/библиотеки и выполнит окончательное связывание.

Динамическое связывание дает три преимущества:

  • Часто используемые библиотеки (например, стандартная системная библиотека ) необходимо хранить только в одном месте, а не дублировать в каждом двоичном файле.
  • Если библиотека обновлена ​​или заменена, все программы, использующие ее динамически, немедленно получат выгоду от исправлений. Статические сборки должны быть сначала перелинкованы.
  • Размер двоичного исполняемого файла меньше, чем его статически скомпонованный аналог.

Статичное здание

В статически построенной программе динамическое связывание не происходит: все связывания выполняются во время компиляции .

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

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

Смотрите также

Ссылки

  • Левин, Джон Р. (2000) [октябрь 1999]. Линкеры и загрузчики . Серия Моргана Кауфмана по программной инженерии и программированию (1-е изд.). Сан-Франциско, США: Morgan Kaufmann . ISBN 1-55860-496-0. ISBN 978-1-55860-496-4 . 
  • Керен, Гай (2002). Создание и использование статических и общих библиотек "C" . Little Unix Programmers Group (LUPG).
Получено с "https://en.wikipedia.org/w/index.php?title=Static_build&oldid=1216342346"