При программировании на C библиотеки являются удобным инструментом, помогающим экономить время и место на диске. Таким образом, любой начинающий программист, такой как я, может извлечь пользу из упрощенного (и, надеюсь, не упрощенного) руководства по этому вопросу, которое я и собираюсь предоставить в этой статье.

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

Мы можем легко обойти такую ​​ситуацию, используя статическую библиотеку.

1. Скомпилируйте объекты

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

$ gcc -c -Wall -Werror -Wextra *.c

-c: компилировать и собирать без компоновки

-Стена: включает предупреждения о сомнительных конструкциях в коде

-Werror: превращает все предупреждения в ошибки

-Wextra: включает дополнительные флаги, которые не были включены -Wall

2. Создайте библиотеку

Затем мы используем все только что сгенерированные объектные файлы для создания библиотеки (с расширением «.a»). В этом случае мы называем нашу библиотеку «libgiggity.a».

$ ar -rcs libgiggity.a *.o

-r: заменить существующие объекты новыми или вставить новые, если других копий не найдено

-c: создать библиотеку, если она не существует

-s: записать индекс объекта в архив или обновить существующий

Альтернативным способом создания библиотеки может быть использование обеих команд ar и ranlib, например:

$ ar -rc libgiggity.a *.o
$ ranlib libgiggity.a

Здесь команда ranlib используется для индексации библиотеки, что в первом случае делается путем добавления флага -s.

Применение

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

$ gcc main.c -L. -lgiggity -o main

В данном случае мы компилируем файл с именем «main.c», который вызывает функции из библиотеки «libgiggity.a». Результатом будет исполняемый файл с именем «main».

-L: указать путь, где находится библиотека

-l: указать имя библиотеки (без префикса «lib» и суффикса «.a»)

-o: указать имя выходного файла

***

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