Введение
Статическая сборка — это скомпилированная версия программы, в которой библиотеки статически подключены.
Связывание
В информатике связывание означает объединение одного или нескольких объектных файлов, сгенерированных компиляторами, в единую исполняемую программу. Объектные файлы – это программные модули, содержащие машинный код и определения символов, которые бывают двух типов: Определённые или экспортируемые символы – это функции или переменные, присутствующие в модуле, представленном объектным файлом, и предназначенные для использования другими модулями. Неопределённые или импортируемые символы – это функции или переменные, вызываемые или на которые ссылается данный объектный файл, но не определённые внутри него. Программа-связчик (линкер) разрешает ссылки на неопределённые символы, определяя, какой другой объектный файл содержит определение нужного символа, и заменяя заполнители адресом этого символа. Линкеры могут использовать объектные файлы из коллекции, называемой библиотекой. В конечную программу включаются не все объекты из библиотеки, а только те, которые необходимы. Существуют библиотеки для различных целей, и одна или несколько системных библиотек обычно подключаются по умолчанию.
Defined or exported symbols are functions or variables that are present in the module represented by the object, and which should be available for use by other modules. Undefined or imported symbols are functions or variables that are called or referenced by this object, but not internally defined. A linker program then resolves references to undefined symbols by finding out which other object defines a symbol in question, and replacing placeholders with the symbol's address. Linkers can take objects from a collection called a library. The final program does not include the whole library, only those objects from it that are needed. Libraries for diverse purposes exist, and one or more system libraries are usually linked in by default.
Статика
В статически скомпилированной программе динамическая линковка не происходит: все связи устанавливаются на этапе компиляции. Статические сборки обладают очень предсказуемым поведением (поскольку они не зависят от конкретной версии библиотек, доступных в целевой системе), и часто используются в криминалистических и средствах обеспечения безопасности, чтобы избежать возможного заражения или сбоев из-за неисправных библиотек на анализируемой машине. Та же гибкость, которая позволяет обновлённой библиотеке быть использованной всеми приложениями, использующими динамическую линковку, может также препятствовать корректной работе приложений, требующих наличия определённой версии конкретной библиотеки. Если каждому приложению в системе требуется собственная копия динамической библиотеки для обеспечения корректной работы, преимущества динамической линковки теряют смысл. Другим преимуществом статических сборок является их переносимость: после компиляции окончательного исполняемого файла, хранить файлы библиотек, на которые ссылается программа, больше не требуется, так как все необходимые компоненты копируются непосредственно в исполняемый файл. В результате, при установке статически скомпилированной программы на компьютер, пользователю не нужно скачивать и устанавливать дополнительные библиотеки: программа готова к запуску.