Зачем использовать библиотеки?
Когда вы делаете большой проект, в котором есть много общих функций, которые вам нужно повторно использовать в других проектах, управление каждой функцией по отдельности очень запутанно и беспорядочно, но библиотеки здесь, чтобы помочь нам.
Как работает?
По сути, когда вам нужно повторно использовать несколько функций в вашей программе, компилятор может создать определенные файлы (.a) для компоновки во время компиляции, помните, что программа C представляет собой конгломерат функций, которые работают вместе, начиная с основной функции, обычно называемой записью точка, как правило, функции находятся в заголовочном файле, и вы создаете библиотеку и ссылку на программу для их использования.
Как создать динамические библиотеки?
Прежде всего, существуют в основном типы библиотек, статические или динамические, если вы хотите узнать больше о статических библиотеках, посмотрите мою другую статью об этом, этот пост посвящен динамическим библиотекам.
Прежде всего подготовьте функции
Сначала вам нужны функции для создания динамической библиотеки, в этом примере прототипы функций находятся в файле заголовков, а программа, которая должна использовать динамические функции, называется program.c, а функции для создания динамической библиотеки — test. с
Скомпилируйте функции
Используйте флаг -fpic gcc таким образом
gcc -c -Wall -Werror -Wextra -fpic *.c
Создайте общую библиотеку
Используйте флаг -shared для его создания.
gcc -shared -o libtest.so *.o
На этом шаге рекомендуется переместить общую библиотеку в папку, потому что идея этого может быть использована другими программами (например, папка /opt/lib).
Что теперь?
На последних шагах вы создаете динамическую библиотеку, но вам нужно сообщить gcc, где найти библиотеку, помните, что на каждом компьютере расположение библиотек может измениться.
gcc -L/opt/lib -Wall -Werror -o test program.c -ltest.c
Будьте осторожны на этом шаге, префикс lib в имени общих функций является обязательным, если вы не указали -ltest.c, вы увидите ошибку, в двух словах (libtest соответствует -ltest), -L флаг указывает папку, в которой может находиться программа с динамической библиотекой.
Теперь важно добавить в переменную среды LD_LIBRARY_PATH маршрут вашей общей библиотеки.
LD_LIBRARY_PATH=/opt/lib:$LD_LIBRARY_PATH
Теперь экспортируйте, чтобы включить в программу и другие
export LD_LIRBARY_PATH=/opt/lib:$LD_LIBRARY_PATH
Теперь попробуйте выполнить вашу программу, и вы увидите, как она работает правильно.
В чем отличия статических библиотек
В основном основное отличие заключается в возможности поделиться динамикой с другими программами.
Преимущества использования динамических библиотек
- Общие библиотеки с другими программами
- Не нужно перекомпилировать библиотеки с основной программой
- Поведение аналогично плагинам в браузере.
Недостатки использования динамических библиотек
- Некоторая дополнительная настройка путей, по которым мы можем найти библиотеки.
О последних достоинствах и недостатках статических читайте в статье о статических библиотеках.