Давайте начнем с первого материала, может быть, вы знаете, что такое библиотека в мире, но в данном случае мы будем говорить о библиотеках в системах, особенно в системах типа UNIX.

В этой статье я говорил о статических C — библиотеках, поэтому в этой я буду больше говорить о динамических библиотеках и их отличиях от статики.

ЗАЧЕМ ИСПОЛЬЗОВАТЬ БИБЛИОТЕКИ ВООБЩЕ

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

КАК ОНИ РАБОТАЮТ

В статической библиотеке мы сохраняем все файлы типа «object» (оканчивающиеся на «.o») только в одном файле (оканчивающемся на «.a») из файлов «.c», содержащих функцию. Если мы вызываем какую-либо функцию, наша система сначала ищет статические библиотеки, упрощая выполняемые задачи и сохраняя свободную память.

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

КАК ИХ СОЗДАТЬ (только для Linux)

Чтобы создать динамическую библиотеку, мы должны иметь файлы «.c» с нашими функциями, с соответствующим «header.h» и преобразовать их в объектный файл с помощью команды «GCC» и флагов «-fPIC -c», за которыми следует имя файла с расширением «.c»:

Как только у нас будет готов файл .o, мы снова используем компилятор «GCC» с флагом «-shared», чтобы создать файл для экспорта с расширением «.so», и используя флаг «-o», начиная имя с «lib», например, «libname.so»:

КАК ИСПОЛЬЗОВАТЬ (только для Linux)

Первый шаг для использования динамической библиотеки скомпилируйте с библиотекой, которая нам нужна:

Обратите внимание, что имя библиотеки в данном случае — «libholberton.so», но когда мы компилируем, система может понять, что мы просто вводим «-lholberton», который я компилирую с библиотекой.

Затем следующим шагом является определение переменной среды LD_LIBRARY_PATH в bash с помощью следующей команды:

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

Теперь мы готовы использовать функцию!

В ЧЕМ РАЗНИЦА МЕЖДУ СТАТИЧЕСКИМИ И ДИНАМИЧЕСКИМИ БИБЛИОТЕКАМИ

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

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

ПРЕИМУЩЕСТВА И НЕДОСТАТКИ КАЖДОГО ИЗ НИХ

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