Когда мы запускаем программу на наших компьютерах, мы просто видим значок, файл, ссылку или просто набираем одну команду, но, как обычно в подобных вещах, все не так просто, хотя мы не можем видеть остальное.
Даже небольшая программа может состоять из нескольких частей, называемых функциями, для выполнения задач, и каждый раз, когда мы добавляем одну функцию, мы добавляем как минимум одну функцию, но их может быть и много.
Только представьте, сколько функций может иметь такое программное обеспечение, как текстовый процессор! Затем мы также можем представить, что иметь все функции в одном файле означает иметь много файлов, и это было бы очень неэффективно для системы. Вот почему существуют библиотеки, чтобы иметь множество функций, которые могут быть записаны в отдельных файлах, но сохранены только в одном единственном файле, называемом библиотекой.
Библиотека — это файл, содержащий множество функций, готовых к использованию программой и позволяющий нам получить к ним доступ без большого количества файлов. Этот процесс очень эффективен, упорядочен, и именно поэтому мы используем библиотеки в реальном программном обеспечении, потому что эффективность — это одна из основных характеристик, которую нам нужно учитывать.
По сути, библиотека может быть двух типов: статическая и разделяемая (или динамическая). В следующих строках будут описаны статические библиотеки, а в будущих публикациях будут описаны общие библиотеки.
Статическая библиотека — это файл, в котором мы храним все функции, которые мы используем в нашей основной программе, мы можем хранить столько функций, сколько нам нужно, и как только нам нужно скомпилировать нашу программу, чтобы получить исполняемый файл, библиотека соединяется с программой. . Это означает, что все функции, хранящиеся в статической библиотеке, будут включены в окончательную программу.
Таким образом, копия статической библиотеки будет внутри исполняемой программы, и ее можно будет использовать на других компьютерах без необходимости в других файлах, то есть нам больше не нужен файл статической библиотеки.
Теперь давайте посмотрим, как мы можем создать статическую библиотеку для компиляции исполняемых файлов с помощью этого. Процесс прост, но самое главное — понимать каждый этап процесса.
Во-первых, мы можем поместить все наши файлы функций (файлы с расширением .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 альфа
Как видим, сам процесс несложный, но очень полезный. Каждая созданная статическая библиотека может быть использована для компиляции всех необходимых нам программ и будет полезна до тех пор, пока нам не потребуется изменить в ней исходный код функции.