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

редактировать

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

Содержание
  • 1 Преимущества и недостатки
    • 1.1 Зависит от среды
  • 2 Связывание и загрузка
  • 3 Создание статических библиотек на C / C ++
  • 4 См. Также
  • 5 Ссылки
Преимущества и недостатки

Статическое связывание библиотек с исполняемым файлом имеет несколько преимуществ вместо динамического связывания их. Наиболее значительным преимуществом является то, что приложение может быть уверено, что все его библиотеки присутствуют и что это правильная версия. Это позволяет избежать проблем с зависимостями, известных в просторечии как DLL Hell или, в более общем смысле, dependency hell. Статическая компоновка также может позволить приложению содержаться в одном исполняемом файле, что упрощает распространение и установку.

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

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

Зависит от среды

В Microsoft Windows обычно включают файлы библиотеки, необходимые приложению, в приложение. В Unix-подобных системах это менее распространено, поскольку системы управления пакетами могут использоваться для обеспечения доступности правильных файлов библиотеки. Это позволяет разделять файлы библиотеки между многими приложениями, что приводит к экономии места. Это также позволяет обновлять библиотеку для исправления ошибок и недостатков безопасности без обновления приложений, которые используют библиотеку. На практике многие исполняемые файлы (особенно предназначенные для Microsoft Windows) используют как статические, так и динамические библиотеки.

Связывание и загрузка

Любая функция статической библиотеки может вызывать функцию или процедуру в другой статической библиотеке. Компоновщик и загрузчик обрабатывают это так же, как и другие типы объектных файлов . Файлы статической библиотеки могут быть связаны во время времени выполнения с помощью загрузчика ссылок (например, загрузчика модуля X11 ). Однако вопрос о том, можно ли назвать такой процесс статическим связыванием, остается спорным.

Создание статических библиотек на C / C ++

Статические библиотеки можно легко создать на C или в C ++. Эти два языка предоставляют спецификаторы класса хранения для указания внешней или внутренней связи, в дополнение к предоставлению других функций. Чтобы создать такую ​​библиотеку, экспортируемые функции / процедуры и другие переменные объектов должны быть указаны для внешней связи (т.е. без использования ключевого слова C static ). Имена файлов статических библиотек обычно имеют расширение «.a» в Unix-подобных системах и «.lib» в Microsoft Windows.

. Например, для создания архива с именем libclass.aиз файлов class1.o, class2.o, class3.o, будет использоваться следующая команда:

ar rcs libclass.a class1.o class2.o class3.o

для компиляции программы, которая зависит от class1.o, class2.oи class3.oможно было бы сделать:

cc main.c libclass.a

или (если libclass.aпомещен в путь стандартной библиотеки, например / usr / local / lib)

cc main.c -lclass

или (во время компоновки)

ld... main.o -lclass...

вместо:

cc main.c class1.o class2.o class3.o
См. также
Ссылки
  1. ^ «Статические библиотеки». TLDP. Проверено 3 октября 2013 г.
  2. ^Ande Рсон, Рик (2000-01-11). «Конец ада DLL». microsoft.com. Архивировано из оригинала от 05.06.2001. Проверено 31 августа 2013. Частные библиотеки DLL - это библиотеки DLL, которые устанавливаются с определенным приложением и используются только этим приложением.
Последняя правка сделана 2021-06-09 10:03:54
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте