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

О библиотеках

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

В C есть два типа библиотек: статические и динамические, также известные как общие. В этой статье основное внимание уделяется первому. Вы, вероятно, узнаете статические библиотеки stdio.h и stdlib.h из вашей собственной кодировки.

Как работают библиотеки

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

Создание библиотеки

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

Во-вторых, создайте объектные файлы, скомпилировав ваши .c файлы с помощью команды gcc и флага -c. -c останавливает процесс компиляции после сборки, что необходимо, поскольку компоновка выполняется после того, как библиотека используется в реальной программе. -c также имеет удобную функцию присвоения собранным файлам того же имени, что и их .c части, только вместо этого с расширением .o. Удобный способ сделать это - поместить все нужные .c файлы в каталог, а затем использовать gcc -c *.c.

В-третьих, используйте команду ar с флагами -r и -c, желаемым именем библиотеки и желаемыми файлами. ar - это сокращение от «архив», и он создает библиотеку. Имя файла вашей библиотеки должно начинаться с lib и заканчиваться на .a. -r заменяет или добавляет файлы, которых еще нет в библиотеке. -c заглушает предупреждение, которое в противном случае записывается в стандартную ошибку при создании архива.

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

Вы можете проверить, все ли ваши файлы находятся в библиотеке, используя ar с флагом -t, который перечислит все файлы. Вы также можете использовать команду nm, чтобы просмотреть список имен / таблицу символов, в которой показаны функции в ваших объектных файлах.

Использование библиотеки

Когда у вас есть библиотека и основной файл, с которым вы хотите ее использовать, вы можете использовать команду gcc и имя файла, флаг -L с каталогом, в котором находится библиотека, и флаг -l с именем библиотеки. (без lib и расширения). В приведенном ниже примере e создайте простой main файл, а затем запустите для него gcc . Также стоит отметить, что библиотека находится в нашем текущем каталоге, поэтому мы используем -L..

Удачного кодирования!