Статические библиотеки в C

Зачем использовать библиотеки?

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

Как они работают

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

Как их создать

Предположим, у нас есть файл 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Список содержимого пакета (или библиотеки).

См. также:  Демистификация переменных (Часть I)

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

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: