Что такое библиотеки C?

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

Библиотеки облегчают жизнь

Библиотеки бывают двух видов: статические и динамические. В этом посте мы сосредоточимся на статических библиотеках.

Статические библиотеки восходят к созданию самого C. Статические библиотеки содержат набор объектных (.o) файлов.

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

Нет зависимостей

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

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

Недостатки статических библиотек

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

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

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

Статические библиотеки имеют формат .a. Для создания статических библиотек мы используем команду arforarchiver.

Первый шаг — определить, какие функции мы хотели бы включить в нашу библиотеку, и подготовить их для архиватора — мне нравится размещать все функции, которые мне нравится использовать, в одном каталоге. Затем мы скомпилируем все наши файлы .c source в файлы .o object, пометив флаг -c:

$ gcc -c *.c

После ввода этой команды в каталоге появятся соответствующие файлы .o files. Теперь мы готовы создать файл нашей библиотеки!

Далее мы возьмем все наши .o файлы и упакуем их в один .a файл.

Полный список возможностей команды arcommand можно найти на ее справочной странице ( man ar) — она может создавать статические библиотеки, изменять объектные файлы в статической библиотеке, перечислять имена объектных файлов в библиотеке и многое другое.

Предположим, мы назовем нашу статическую библиотеку libsuper.a. Теперь у нас есть необходимые .oфайлов. Мы запустим команду:

ar -rc libsuper.a *.o

Флаг -r сообщает команде ar создать библиотеку, если она еще не существует, и заменяет старые существующие объектные файлы в библиотеке.

Флаг -c сообщает команде ar создать библиотеку, если она не существует.

Мы создали нашу статическую библиотеку C!

Теперь пришло время использовать нашу новую блестящую библиотеку.

Прежде чем мы это сделаем, давайте посмотрим на параметр связывания на (длинной) справочной странице для gcc ( man gcc).

Библиотеку указываем компилятору с -lname где name это имя файла библиотеки без префикса lib. Ранее мы создавали библиотеку libsuper.a . Мы также указываем местоположение для наших библиотек, а именно текущую директорию с помощью флага -L.

Наша последняя команда для компиляции нашей программы (мы назовем ее prog в этом примере):

gcc main.c -L -lsuper prog