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

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

Например

/* #include ‹stdlib.h› */
/* #include ‹string.h› */
/* #include ‹stdio.h› */

ТИП БИБЛИОТЕКИ

есть два типа статических и динамических библиотек.

СТАТИЧЕСКАЯ БИБЛИОТЕКА

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

как вызывать библиотеки

#include ‹stdio.h›

#include ‹stdlib.h›

#include ‹time.h›

ДИНАМИЧЕСКИЕ БИБЛИОТЕКИ

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

Каковы преимущества и недостатки каждого из этих типов библиотек?

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

Последовательность команд для создания динамических библиотек.

gcc -c -Wall -Werror -fpic *.c

gcc -shared -o имя_библиотеки.so *.o

gcc -Wall -pedantic -Werror -Wextra -L. main.c -lname -o len

экспортировать LD_LIBRARY_PATH=/the_path_goes_here:$LD_LIBRARY_PATH

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

В unix статические библиотеки часто называются libname.a, а динамические libname.so, где name — это имя нашей библиотеки.

!БЛАГОДАРНОСТЬ