logo
ПЗ_А

2.5.1.Статические и динамические библиотеки

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

В первом приближении библиотеки можно разделить на статические и динамические.

Статические библиотеки являются набором объектных файлов и традиционно имеют расширение «.а» в Linux. Когда программа связывается со статической библиотекой, машинный код из объектных файлов для каждой используемой программой функции библиотеки копируется из библиотеки в конечный исполняемый файл. Главным минусом подобного способа связи является значительное увеличение размера исполняемого файла.

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

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

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

При вызове подпрограммы динамической библиотеки возможны два варианта связывания – явное и неявное. В случае явного связывания осуществляется поиск по имени и вызов функции непосредственно во время исполнения. В случае неявного связывания прототип функции известен заранее и объявлен в соответствующем заголовочном файле. Второй способ наиболее распространен и был использован при разработке рассматриваемого программного средства.