Некоторый фоновый контекст ..

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

В C статическую библиотеку можно увидеть в каталоге /usr/lib/ вашей операционной системы Linux. Статические библиотеки также известны как архивы, и я думаю, что это название имеет какое-то отношение к определению архива - коллекции исторических документов или записей, предоставляющих информацию.

Библиотеки имеют расширение .a и lib в качестве префикса перед именем библиотеки, поэтому естественно, что библиотека C - это libc.a.

Вы можете проверить библиотеку, набрав

ar -t <archive> в свой терминал.

Команда ar создает, изменяет или извлекает из архивов.

Флаг -t отображает таблицу со списком содержимого архива.

Библиотека, необходимая для выполнения такой задачи, - это стандартная библиотека ввода / вывода. См. Пример ниже.

#include <stdio.h>

примечание: этот заголовок находится в самом верху каждой программы, которая хочет его использовать, и в основном используется для использования функций printf () и scanf ().

Между заголовочными файлами и библиотеками есть два ключевых различия.

  • в заголовочном файле есть объявление функции, также известное как «прототип».

  • библиотека содержит определение функции

Во время компиляции основная функция вызовет другую функцию - также известную как подпрограмма, и компилятор будет искать в стандартной библиотеке C объектный код указанной функции / подпрограммы (-ий) и связывать, где это необходимо, так, чтобы окончательный исполняемый файл был правильно создан.

Почему библиотеки важны?

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

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

Первый шаг - запустить наши C-файлы через компилятор GCC, чтобы создать соответствующие файлы объектного кода, оканчивающиеся расширением.o, используя подстановочный знак * и расширение имени пути, чтобы выполнить операцию со всеми .c файлами.

Затем мы используем флаг -c на gcc, чтобы пропустить файлы через компилятор до стадии компоновки.

gccall -c *.c

примечание: gccall - это мой собственный псевдоним для следующих флагов:

  • стена
  • Педантичный
  • Werror

Затем используйте команду ar для создания архива.

Чтобы создать статическую библиотеку с именем scratch со всеми объектными файлами в нашем рабочем каталоге, мы должны использовать следующую команду:

ar -rc libscratch.a *.o

Это создает статическую библиотеку с именем libscratch.a и вставляет в нее (копии) объектных файлов.

  • флаг -c указывает на создание библиотеки, если она еще не существует.
  • флаг -r заменяет старые копии объектных файлов более новыми файлами, если файл был обновлен.

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

ranlib libscratch.a

С другой стороны, вы можете использовать команду nm, чтобы просмотреть содержимое внутри библиотеки. Это похоже на команду «cat» в том, что она отображает содержимое внутри файла.

Вот и все, вы в значительной степени изучили TL; DR для статических библиотек. Если вы хотите узнать больше, я предлагаю просмотреть YouTube и StackOverflow.