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

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

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

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

По сути, библиотека может быть двух типов: статическая и разделяемая (или динамическая). В следующих строках будут описаны статические библиотеки, а в будущих публикациях будут описаны общие библиотеки.

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

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

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

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

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

Это скомпилирует каждый файл «c» в текущем каталоге и создаст объектный файл с расширением «.o» для каждого из них. Объектный файл — это файл в машинном коде, который мы будем использовать для создания нашей библиотеки.

Во-вторых, мы будем использовать команду «ar» (означает «архив», это в Linux), чтобы создать библиотеку с архивами «o». Архив — это отдельный файл, содержащий набор других файлов.

ar -rc libholberton.a *.o
ar -t libholberton.a

Первая строка создает статическую библиотеку с именем libholberton.a со всеми o-файлами в текущем каталоге. Мы используем флаги «r» и «c» для указания замены старых объектов и создания библиотеки, если она не существует, соответственно. Во второй строке отображается таблица со списком содержимого библиотеки после ее создания.

Наконец, мы можем создать индекс для библиотеки и улучшить доступ к объектам в ней, используя следующую команду;

ранлиб libholberton.a

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

gcc main.c -L. -lholberton -o альфа

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