Зачем использовать библиотеки?
Когда мы создаем программу, мы видим, что многие функции повторяются в большей ее части, у нас могут быть функции, выполняющие сложные задачи, и, таким образом, мы экономим время на повторное написание кода или его копирование и вставку.
Как они работают
Как мы упоминали, для повторного использования написанного кода программисту необходимо сохранять созданные и используемые функции в библиотеках, они должны быть хорошо задокументированы для использования, статическая библиотека «скопирована» в наш исполняемый файл, что означает, что мы можем перенести его на другой компьютер без боязнь пропажи библиотек. Они выполняются быстрее, потому что функции находятся внутри исполняемого файла, и нам не нужно их искать.
Как их создать
Предположим, у нас есть файл all_the_files.c, содержащий код функций, которые мы хотим включить в библиотеку libholberton.a для получения объектных файлов, которые мы компилируем как всегда:
gcc -c -o 0-isupper.o 0-isupper.c gcc -c -o 0-memset.o 0-memset.c gcc -c -o 0-strcat.o 0-strcat.c
продолжаем процесс со всеми оставшимися файлами, что даст нам в результате новые файлы, подобные этому:
Затем мы упаковываем полученные файлы с помощью ar (упаковщик, аналогичный tar).
ar rcs libholberton.a *.o
Как мы могли видеть, библиотека была создана с функцией libholberton.a, *.o она указывала, что все файлы, имеющие расширение .o будет включен. но, как мы можем видеть содержание нашей либерии, очень простой ar дает нам ряд вариантов, таких как следующие:
s Создайте указатель содержания.
cСоздайте пакет, если он не существует.
rЗамените файлы, если они уже существуют в пакете.
tСписок содержимого пакета (или библиотеки).
xИзвлечь файл из пакета (или библиотеки).
Пример:
ar -t libholberton.a
Список содержимого пакета или библиотеки. Таким образом, мы можем знать, что он содержит.
Последним шагом будет отладка.
Команда nm, представленная в последних версиях Unix и подобных операционных системах, используется для помощи в отладке при проверке файлов, включая библиотеки, объектные модули и исполняемые файлы.
Ее вывод показывает символ таблицу, в частности строку для каждого символа, который находится в указанной библиотеке объектов или файле. Каждый символ указывает свой размер в байтах, тип объекта, его область действия и его имя.
man nm
используемый в нашей библиотеке, будет выглядеть примерно так:
nm libholberton.a
Как их использовать
Чтобы использовать функции и символы, содержащиеся в статической библиотеке, необходимо связать эти символы при монтировании исполняемого файла. Для этого мы должны сообщить компилятору, какие библиотеки мы хотим использовать и где они находятся.
Если мы написали программу apli1.c, которая использует библиотеку, которую мы создали в предыдущем пункте, и мы хотим ее скомпилировать, мы должны сделать следующее:
Сначала компилируем программу:
$ gcc -c -o apli1.o apli1.c
Имея в виду, что при компиляции файлы интерфейса (.h) библиотеки должны находиться в пути. Если это не так, компилятору нужно сообщить, где находятся эти файлы, с помощью параметра -I, например:
$ gcc -c -o apli1.o apli1.c -Idir_lib
Затем программа настраивается с библиотекой, указывающей, где она находится и как ее зовут:
$ gcc -o apli1 apli1.o -Ldir_lib -lfich