Зачем использовать библиотеки на C

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

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

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

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

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

Библиотека проиндексирована, а это значит, что символы в них легко найти.

Есть два типа библиотек, и они работают по-разному.

Статические библиотеки

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

Общие (или динамические) библиотеки

Общие библиотеки разные. Они связаны с программой в два этапа.

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

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

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

Для создания статической библиотеки мы используем инструмент под названием «ar». Он может изменять создание статических библиотек, изменять объектные файлы в библиотеке и перечислять объекты в библиотеке. Мы используем это так:

ar -rc libfoo.a omegha.o alpha.o

«r» указывает заменить старые объектные файлы новыми, «c» создать библиотеку, если она не существует, libfoo.a — это имя библиотеки, omega.o и alpha.o — это файлы объектов. С помощью этой команды мы добавляем в библиотеку foo скомпилированные файлы файлов функций omega и alpha.

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

ranlib libfoo.a

Наконец, мы можем использовать библиотеку.

ПРИМЕЧАНИЕ. Чтобы скомпилировать наши объектные файлы (файлы, содержащие наши функции), мы можем использовать следующую команду

gcc -Wall -pedantic -Werror -Wextra -c [function file name].c

Как использовать статические библиотеки

Мы можем использовать наш файл (библиотеку), добавив его имя в компилятор, используя специальный флаг (-l), который передает его компоновщику.

gcc main.c -L. -lfoo -o exec

gcc — это программа-компилятор, main.c — наша программа, «-L» — это флаг, указывающий, где находится библиотека, -lfoo — это флаг, который сообщает имя библиотеки компоновщику.

ПРИМЕЧАНИЕ. Когда мы используем флаг «-l», он заменяет префикс lib и завершение .a.

Эта статья сделана с помощью и ресурсами этой страницы http://docencia.ac.upc.edu/FIB/USO/Bibliografia/unix-c-libraries.html#what_is_a_library