C статические библиотеки 101

Библиотеки в C — это набор функций, выполняющих определенные задачи. Стандартная библиотека C, например, подключается в программе в процессе компиляции — когда вы запускаете команду «gcc». Стандартные библиотеки обычно находятся в каталоге /usr/lib.

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

Статические библиотеки включены в исполняемый код. Фактический код извлекается компоновщиком (копия созданного кода) и используется для создания исполняемого файла. Теперь в программе есть все необходимое для успешной работы. Единственным недостатком статических библиотек является то, что если вы хотите внести изменения в исходный код, вам придется перекомпилировать вашу программу, чтобы эти изменения были распознаны. Все статически подключаемые библиотеки в Linux имеют расширение .a.

Создание статической библиотеки

Чтобы создать статическую библиотеку, вам нужно будет использовать программу "ar" (расшифровывается как архиватор) и поместить объектные файлы ( file.o ) в вашу статическую библиотеку ( >libyourlibrary.a ). Имя каждой статической библиотеки начинается с "lib" и имеет расширение ".a".

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

Команда: gcc -c *.c

Результатом этой команды являются объектные файлы наших исходных файлов .c. По умолчанию имя объектного файла для исходного файла создается путем замены суффикса .c, .i, .s и т. д., с .o.

Каждый исходный файл теперь имеет свой объектный файл.

2. Теперь давайте создадим нашу статическую библиотеку libtaticlibrary.a и поместим в нее копии наших объектных файлов.

Команда: ar rc libtaticlibrary.a *.o

«ar» — архиватор. Флаг c означает, что ar должен создать библиотеку, если она еще не существует. Флаг "r" обеспечивает замену старых объектных файлов в библиотеке новыми объектными файлами.

Мы только что создали статическую библиотеку с именем «libtaticlibrary.a».

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

Команда: ranlib libstaticlibrary.a

Как использовать статические библиотеки

После того, как вы создали свою библиотеку, вы можете использовать ее в своей программе.

Команда:cc files.o -L. -lstaticlibrary.a -o исполняемый файл

Где -L. указывает компоновщику искать в текущем каталоге статическую библиотеку -lstaticlibrary.a , связать ее с программой и упаковать все в исполняемый файл execfile .