При программировании на C библиотеки являются удобным инструментом, помогающим экономить время и место на диске. Таким образом, любой начинающий программист, такой как я, может извлечь пользу из упрощенного (и, надеюсь, не упрощенного) руководства по этому вопросу, которое я и собираюсь предоставить в этой статье.
Обычно при компиляции скрипта, который вызывает функцию из другого скрипта, мы используем заголовочный файл (тот, что с расширением «.h»), который работает как посредник, обеспечивая соединение (на этапе компоновки процесса компиляции). ) обоих сценариев для успешного выполнения. Когда мы компилируем скрипт, использующий функцию из другого скрипта, с помощью команды gcc, мы должны включать имена всех скриптов, функции которых вызываются. Однако это создает проблему, заключающуюся в том, что если упомянуть слишком много вспомогательных скриптов, написание команды компиляции станет громоздким процессом.
Мы можем легко обойти такую ситуацию, используя статическую библиотеку.
1. Скомпилируйте объекты
Первым шагом является компиляция отдельных сценариев в файлы объектов без их связывания. В этом случае мы скопировали все сценарии, которые хотим включить в нашу библиотеку, в новую папку, где мы запустим следующую команду.
$ gcc -c -Wall -Werror -Wextra *.c
-c: компилировать и собирать без компоновки
-Стена: включает предупреждения о сомнительных конструкциях в коде
-Werror: превращает все предупреждения в ошибки
-Wextra: включает дополнительные флаги, которые не были включены -Wall
2. Создайте библиотеку
Затем мы используем все только что сгенерированные объектные файлы для создания библиотеки (с расширением «.a»). В этом случае мы называем нашу библиотеку «libgiggity.a».
$ar
-rcslibgiggity.a
*.o
-r: заменить существующие объекты новыми или вставить новые, если других копий не найдено
-c: создать библиотеку, если она не существует
-s: записать индекс объекта в архив или обновить существующий
Альтернативным способом создания библиотеки может быть использование обеих команд ar и ranlib, например:
$ar
-rclibgiggity.a
*.o $ ranlib libgiggity.a
Здесь команда ranlib используется для индексации библиотеки, что в первом случае делается путем добавления флага -s.
Применение
Итак, теперь, когда у нас есть статическая библиотека, мы можем использовать ее в процессе компиляции, например:
$gcc main.c
-L.-lgiggity
-o
main
В данном случае мы компилируем файл с именем «main.c», который вызывает функции из библиотеки «libgiggity.a». Результатом будет исполняемый файл с именем «main».
-L: указать путь, где находится библиотека
-l: указать имя библиотеки (без префикса «lib» и суффикса «.a»)
-o: указать имя выходного файла
***
Вуаля! Теперь у нас есть собственная библиотека, которую удобно использовать при компиляции любого файла, вызывающего любую из функций, входящих в библиотеку.