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

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

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

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

как создать статическую библиотеку

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

[root@host ~]# gcc -c *.c

мы используем в «gcc», который является компилятором linux, который помогает нам компилировать наш код с -c (для получения дополнительной информации обратитесь к руководству пользователя gcc). затем идут файлы .c, которые мы можем записать один за другим, но это займет время, в этом случае мы используем подстановочный знак *, который поможет нам вызвать все файлы .c, которые существуют в каждой папке, мы вводим и компилируем каждый файл .c и создайте нам файлы .o, которые являются файлами компиляции.

Создайте статическую библиотеку libheymath, выполнив следующую команду:

[root@host ~]# ar rs libheymath.a *.o

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

Теперь удалите все файлы .o из рабочего каталога (rm поможет вам в этом). Создайте addDemo.или следующим образом:
[root@host ~]# gcc -I . -c addDemo.c

И свяжите его с heymath.a, чтобы сгенерировать окончательный исполняемый объектный файл.
[root@host ~]# gcc -o addDemo addDemo.o libheymath.a

как создавать динамические или общие библиотеки

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

Мы также используем файлы .c в определенном каталоге. Мы используем следующую команду для создания файлов .o:
[root@host ~]# gcc -Wall -fPIC -c *.c

мы используем gcc, который является компилятором, и добавляем -Wall включает предупреждения для многих распространенных ошибок, и его следует использовать всегда, а затем -fPIC включает генерацию «независимого от позиции кода». за которой следует -c — команда gcc, помогающая компилировать файлы .c и создавать файлы .o.
Теперь соберите libheymath.library с помощью следующей команды:
[root@host ~] # gcc -shared -o libheymath.so *.o

Эту недавно созданную разделяемую библиотеку libheymath.sose можно использовать вместо libheymath.a.

После создания общей библиотеки ее необходимо установить. И самый простой способ установки — скопировать библиотеку в один из стандартных каталогов (например, /usr/lib) и запустить команду ldconfig:

[root@host ~]# mv libheymath.a /usr/lib
after
[root@host ~]# ldconfig

После выполнения команды ldconfig исполняемый файл addDemo можно собрать следующим образом. Также перекомпилируйте addDemo.cambién. Вы можете пропустить его, если addDemo.oya находится в вашем рабочем каталоге.

[root@host ~]# gcc -c addDemo.c
[root@host ~]# gcc -o addDemo addDemo.o libheymath.so
o
[root@host ~]# gcc -o addDemo addDemo.o -lheymath

Вы можете перечислить зависимости общей библиотеки, от которой зависит ваш исполняемый файл. Команда ldd ‹name-of-executable› сделает это за вас.

[root@host ~]# ldd add
libheymath.so =› /usr/lib/libheymath.so (0x00002b19378fa000)
libc.so.6 =› /lib64/libc.so. 6 (0x00002b1937afb000)
/lib64/ld-linux-x86–64.so.2 (0x00002b19376dd000)

информацию о том, как создать файл demo.c, можно найти здесь.
https://bit.ly/2lU6jKh

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