Чтобы начать этот блог, мы начнем с понимания того, что библиотеки в целом:

Библиотеки — это простой и универсальный способ модуляции и повторного использования кода. Мы видим продолжение процесса создания как статических, так и динамических библиотек, их возможного использования и минимальных ресурсов, необходимых для правильного управления ими.

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

ШАГИ ДЛЯ СОЗДАНИЯ СТАТИЧЕСКИХ БИБЛИОТЕК:

Чтобы создать наши статические библиотеки, в качестве первого шага мы конвертируем все наши файлы с расширением .c в объектный код .o.

Основным инструментом, используемым для создания статических библиотек, является программа под названием «ar», что означает «архиватор». Эту программу можно использовать для создания статических библиотек (которые на самом деле являются файлами хранилища), и мы можем использовать следующую команду.

Флаг «c» указывает ar создать библиотеку, если она еще не существует. Флаг «r» говорит вам заменить самые старые объектные файлы в библиотеке новыми объектными файлами.

ar -rc libholbertonschool.a *.o

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

ranlib libholbertonschool.

ИСПОЛЬЗОВАНИЕ НАШЕГО СТАТИЧЕСКОГО КНИЖНОГО МАГАЗИНА В ПРОГРАММЕ:

После того, как мы создали наш архив, мы хотим использовать его в программе. Это делается путем добавления имени библиотеки в список имен объектных файлов, переданных компоновщику, с использованием специального флага, обычно ‘-l’. Вот пример:

gcc main.c -L. -lholbertonschool -o альфа

Это создаст программу, используя объектный файл «main.o» и любые необходимые символы из статической библиотеки «util». Обратите внимание, что мы опустили префикс «lib» и суффикс «.a» при упоминании библиотеки в команде ссылки. Компоновщик присоединяет эти части обратно к имени библиотеки, чтобы создать имя файла для поиска. Обратите также внимание на использование флага «-L» — этот флаг сообщает компоновщику, что библиотеки могут быть найдены в заданном каталоге («.», ссылающемся на текущий каталог), в дополнение к стандартным расположениям, в которых компилятор ищет системные файлы. библиотеки.

ДИНАМИЧЕСКИЕ БИБЛИОТЕКИ:

Использование динамических объектов предполагает отложенное подключение указанных объектов при сборке приложения. При запуске приложения и только тогда происходит связь (динамическая) с объектами, содержащимися в библиотеке. За создание динамических библиотек отвечает компоновщик или редактор (в нашем случае ld), хотя также можно указать компилятору необходимые опции для сборки, и таким образом он будет отвечать за передать их в редакцию.

СОЗДАНИЕ ДИНАМИЧЕСКОЙ БИБЛИОТЕКИ

При создании динамического объекта необходимо, чтобы код объекта не зависел от позиции, для получения такого типа кода компилятору должна быть указана опция -fPIC (Position Independent Code). Указанный флаг должен быть указан как при компиляции, так и при сборке библиотеки. Для монтирования объектов также необходимо указать опцию -shared, чтобы в результате получился «общаемый» объектный файл.

— — — Синтаксис — — —

для монтирования объектов необходимо указать опцию -shared, чтобы файл был общим объектом.

ИСПОЛЬЗОВАНИЕ ДИНАМИЧЕСКОЙ БИБЛИОТЕКИ

Чтобы использовать эту библиотеку из программы; это точно так же, как и в случае со статической библиотекой. При использовании библиотеки компилятор сначала ищет динамическую версию (.so), если не находит, то ищет статическую версию. Если у вас есть обе версии библиотеки и вы хотите использовать статическую версию, вы должны указать редактору флаг -static. Когда программа использует динамические библиотеки, системе необходимо найти их во время выполнения (в отличие от статических библиотек). Места, где программа ищет динамические библиотеки, следующие (в этом порядке):

  • В каталогах переменная LD_LIBRARY_PATH.
  • В файле ld.so.cache. В каталогах /usr/lib и /lib.
  • В каталогах, содержащихся в ld.so.conf

Обычно лучше всего использовать переменную среды LD_LIBRARY_PATH, чтобы указать, какие каталоги искать:

— — — Синтаксис — — —

Когда у нас есть исполняемый файл и мы его выполняем, всякий раз, когда коду нужно что-то из библиотеки, он будет это искать. если мы будем стирать библиотеку, то наша программа выдаст ошибку, что не может ее найти.