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

Итак, что такое библиотеки? Зачем они нужны и как они работают? — спросите вы. Об этом я расскажу в этом коротком блоге.

Что такое библиотеки в C?

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

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

Зачем нам нужны библиотеки?

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

Как работают библиотеки?

В системе Unix нам разрешено создавать и использовать два типа библиотек — статические библиотеки и разделяемые (или динамические) библиотеки. В этом сообщении блога мы сосредоточимся на статических библиотеках.

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

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

Как создать статическую библиотеку

Чтобы создать статическую библиотеку, нам нужно использовать программу под названием «ar» для архиватора.

ar rc libmy.a function.o

Эта команда создает статическую библиотеку с именем my и помещает в нее копии объектных файлов function.o.

Флаг 'c' указывает ar создать библиотеку, если ее еще нет. Параметр 'r' указывает «ar» заменить старые объектные файлы в библиотеке новыми объектными файлами.

Имена файлов библиотеки всегда начинаются с lib и заканчиваются расширением .a для архива, статической библиотеки. (для общего объекта, динамически связанной библиотеки это .so).

После создания библиотеки ее необходимо проиндексировать. архив создается или модифицируется, необходимо его проиндексировать. Для этого мы используем команду ranlib следующим образом:

ranlib libmy.a 

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

ar -t libmy.a

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

Первый шаг — скомпилировать файл .c в объектный файл:

gcc -c file.c -o file.o

Второй шаг — связать файл .o при компиляции с использованием флага -L, который сообщает компоновщику, что библиотеки могут быть найдены в данном каталоге вместе со стандартными местами для библиотек.

gcc main.o -L. lmy.a -o myprogram.o

Обратите внимание, что нам не нужно использовать префикс «lib» и суффикс «.a» при связывании библиотеки с помощью этой команды, потому что компоновщик повторно подключит их для нас, когда мы используем параметр «-l», за которым следует библиотека. имя.

Наконец, мы готовы запустить нашу исполняемую программу, набрав this instance, ./myprog” и нажав Enter.

Сохраняйте спокойствие и продолжайте программировать! 👩🏻‍💻

Источники: