Библиотечные функции в языке C — это встроенные функции, которые сгруппированы и помещены в общее место, называемое librar, каждая библиотечная функция в C выполняет определенную операцию.

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

Почему вы на самом деле хотите использовать библиотеку C?

Они работают

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

Эти функции прошли многочисленные строгие испытания и просты в использовании.

Функции оптимизированы для повышения производительности

Поскольку функции являются функциями «стандартной библиотеки», специальная группа разработчиков постоянно улучшает их.

При этом они могут создавать наиболее эффективный код, оптимизированный для максимальной производительности.

Это значительно экономит время разработки

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

Это экономит драгоценное время, и ваш код не всегда может быть самым эффективным.

Функции переносимы

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

И эти библиотечные функции помогают вам в том, что они делают одно и то же на каждом компьютере.

Это экономит время, усилия и делает вашу программу портативной.

Как они работают?

Когда программа C компилируется, компилятор генерирует объектный код. После генерации объектного кода компилятор также вызывает компоновщик. Одна из основных задач компоновщика — сделать код библиотечных функций (например, printf(), scanf(), sqrt() и т. д.) доступным для вашей программы. Компоновщик может выполнить эту задачу двумя способами: скопировав код библиотечной функции в ваш объектный код или приняв меры, чтобы весь код библиотечной функции не копировался, а был доступен во время выполнения.

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

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

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

Только операционные системы Linux

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

написать в терминале

gcc *.c -c -fPIC

Исходные файлы .c должны быть подготовлены для использования в динамической библиотеке. Поскольку несколько программ могут использовать один экземпляр динамической библиотеки, библиотека не может хранить данные по фиксированным адресам, поэтому убедитесь, что файлы находятся по одному и тому же пути.

Используя флаг компилятора -fPIC, мы применяем этот шаг после того, как процесс компиляции сгенерировал объектный код, компилятор должен остановиться и вернуть один объектный файл (.o) для каждого исходного файла. Это делается с помощью флага -c.

после этого берем все файлы .o и делаем динамическую библиотеку

gcc *.o -shared -o [name_of_your_library.so]

Флаг -shared скомпилировал файлы в динамическую библиотеку.

export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH

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

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

Только операционные системы Linux

сначала нам нужно скомпилировать все файлы C, которые будут содержаться в этой библиотеке, с помощью этой команды

gcc -Wall -pedantic -Werror -Wextra -c [the_files.c_to_include]

мы можем создать статическую библиотеку с помощью этой команды

ar -rc [Your_library_name] [your_files]

Если мы хотим увидеть функции, которые включает библиотека, мы можем использовать

ar -t [library_name]

Эта статическая библиотека используется во время компоновки, чтобы удовлетворить неопределенные в противном случае ссылки. Все, что не выполняется во время компоновки (время компиляции здесь не важно), должно быть выполнено во время загрузки.

Как я могу использовать статическую библиотеку?

Только операционные системы Linux

когда мы компилируем файл, нам нужно подключить библиотеку

gcc [file_to_compile_]-L. -l[library] -o [created_file_name]

Как я могу использовать динамическую библиотеку?

Только операционные системы Linux

вы можете скомпилировать свой файл с помощью этой команды
(вызвать библиотеку без .so)

gcc -Wall -pedantic -Werror -Wextra -L. [name_of_your_file.c] -[name_of_your_library] -o [final_name_of_your_compile_file]

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

Есть ли различия между статическими и динамическими библиотеками?

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

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

ЗА И ПРОТИВ СТАТИЧЕСКИХ БИБЛИОТЕК

Плюсы: не влияет на производительность, так как код всегда загружается в процессе и не возникает проблем с версиями.

Минусы: исполняемый файл/процесс «раздут» — весь код находится в вашем исполняемом файле и загружается при запуске процесса; никакого повторного использования/совместного использования — у каждого продукта есть своя копия кода.

Минусы: статические библиотеки увеличивают размер кода.

ЗА И ПРОТИВ ДИНАМИЧЕСКИХ БИБЛИОТЕК

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

Минусы: исполняемые файлы не являются самодостаточными. Кроме того, если мы изменим общие библиотеки (библиотеки динамической компоновки), соответствующий исполняемый файл может работать неправильно.

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

Минусы: меньшее время выполнения по сравнению со статическими библиотеками.