Причина, по которой мы используем библиотеки в целом, заключается в том, что это набор общих функций, которые программист создал и часто использует. Это позволяет им иметь доступ ко всем своим файлам, включая их в программу во время компиляции. Однако статические и динамические библиотеки включают эту информацию по-разному.
Динамические библиотеки включают адрес библиотеки вместо фактического кода в библиотеке. Динамическое связывание ссылок во время выполнения, а не при компиляции. Это позволяет функциям занимать особое место в памяти, позволяя каждой программе иметь доступ к ним без использования нескольких копий. Статические библиотеки компилируются вместе с программой и являются ее частью. Никакая другая программа не может получить доступ к библиотеке.
Чтобы создать динамическую библиотеку на 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, добавляемых в программу в процессе компиляции. Динамические библиотеки отделены от программы, они компилируются, компонуются и устанавливаются отдельно от программы. Таким образом, любая программа может вызывать его.
Каковы недостатки каждого из них?
Статические библиотеки компилируются вместе с программой, а это означает, что обновление библиотеки означает, что вам придется перекомпилировать всю программу. Однако никакая внешняя программа не может получить доступ к тому, что может быть лучше для безопасности.
У динамических библиотек есть один большой недостаток: если несколько программ используют одну и ту же библиотеку, и каждая программа ожидает разные версии библиотеки, возникнут большие проблемы. Чтобы избежать этого, библиотеку необходимо обновлять, сохраняя обратную совместимость библиотеки.