Jump to content

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

(Перенаправлено из статических библиотек )

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

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

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

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

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

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

Зависит от окружающей среды

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

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

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

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

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

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

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

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

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

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

скомпилировать программу, которая зависит от класс1.о , 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. ^ Перейти обратно: а б с «Статические библиотеки» . ТЛДП . Проверено 3 октября 2013 г.
  2. ^ Андерсон, Рик (11 января 2000 г.). «Конец ада DLL» . microsoft.com. Архивировано из оригинала 5 июня 2001 г. Проверено 31 августа 2013 г. Частные библиотеки DLL — это библиотеки DLL, которые устанавливаются вместе с определенным приложением и используются только этим приложением.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b71f69a7b18183887d027152bda9e52b__1708518120
URL1:https://arc.ask3.ru/arc/aa/b7/2b/b71f69a7b18183887d027152bda9e52b.html
Заголовок, (Title) документа по адресу, URL1:
Static library - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)