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

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

Преимущества и недостатки

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

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

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

Специфика окружающей среды

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

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

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

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

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

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

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

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

cc main.c libclass.a

или если libclass.a помещается в стандартный путь к библиотеке, например / USR / местные / библиотека)

cc main.c -lclass

или (при связывании)

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

вместо:

cc main.c class1.o class2.o class3.o

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

Рекомендации

  1. ^ а б c «Статические библиотеки». TLDP. Получено 3 октября 2013.
  2. ^ Андерсон, Рик (2000-01-11). "Конец ада DLL". microsoft.com. Архивировано из оригинал на 2001-06-05. Получено 2013-08-31. Частные библиотеки DLL - это библиотеки DLL, которые устанавливаются с определенным приложением и используются только этим приложением.