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

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

Чтобы создать динамическую библиотеку на C с помощью Linux, используйте следующую команду:

$ gcc -g -fPIC -Wall -Werror -Wextra -pedantic *.c -shared -o liball.so

gcc: Это компилятор ac
-g: Включает отладочную информацию
-fPIC: «Позитин-независимый код» Этот флаг позволяет размещать код
по любому виртуальному адресу.
- Wall: Включает все флаги для gcc
-Werror: Выдает любые предупреждающие ошибки
-Wextra: Включает дополнительные флаги
-pedantic: гарантирует, что стандарт C тот же.
*. c: указывает компьютеру использовать все файлы .c
-shared: создает общую библиотеку
-o: позволяет указать имя выходного файла
liball.so: имя выходного файла.

Чтобы использовать динамическую библиотеку, включите ее на этапе компиляции

$gcc -Wall -Werror -Wextra -pedantic FILE1.c liball.so -o ИМЯ ФАЙЛА

Чтобы создать статическую библиотеку на C с помощью Linux, используйте следующую команду:

$ ar -rc *.o liball.a

ar: позволяет создавать, изменять и извлекать из архивов
-r: флаг, который вставляет члены файла в архив
-c флаг, который создает архив
*.o: сообщает компьютер для использования всех файлов .o в каталоге

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

$ gcc -g ФАЙЛ1.o liball.a -o ИМЯ ФАЙЛА

Чем отличаются статические и динамические библиотеки?

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

Каковы недостатки каждого из них?

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

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