Зачем использовать библиотеки? Язык программирования C позволяет нам использовать как статические, так и динамические (или разделяемые) библиотеки. Библиотеки полезны при программировании: они позволяют нам внутри нашей программы вызывать функцию, которая существует в библиотеке, что избавляет от необходимости многократно писать весь код для часто используемых функций. Например, функция «printf» находится в стандартной (динамической или разделяемой) библиотеке и в какой-то момент используется всеми программистами на C. Библиотеки, будь то статические или динамические, позволяют нам не переписывать один и тот же код снова и снова. Библиотеки также помогают нам поддерживать гладкость и аккуратность нашего кода. Библиотеки — это просто ряд объектных файлов, которые компоновщик обрабатывает как единое целое на четвертом этапе компиляции программы. Обычно они индексируются, что упрощает поиск функций, переменных и других символов; имея меньше файлов для просмотра и открытия, библиотека позволяет быстро и легко найти то, что нужно. Давайте посмотрим, как работают библиотеки.

Как они работают: динамические библиотеки, такие как, например, стандартная библиотека «C», являются как общими, которые используются всеми, кто использует «C», так и динамическими, предоставляя преимущество в том, что их можно обновлять, не заставляя нас обновлять или переписывать. наши основные программы. Динамические библиотеки могут быть немного медленнее, чем статические библиотеки, но дают преимущество: когда выполняется другая программа, связанная с динамической библиотекой, может использоваться та же самая копия динамической библиотеки, что экономит значительный объем памяти. Например, в любой момент времени в памяти присутствует только одна копия стандартной библиотеки «C», но она используется всеми программами на C, что экономит память и место на диске, поскольку исполняемые файлы также намного меньше.

Статические библиотеки работают немного по-другому. В то время как динамические библиотеки подключаются к программе в два этапа (во время компиляции и снова во время выполнения), объектные файлы статических библиотек просто подключаются к программе во время компоновщика (4-й) этап компиляции. Поэтому они объединяются с программой в исполняемый файл. Без динамической загрузки, связанной с использованием динамических библиотек, запуск программы происходит несколько быстрее.

Как создавать статические библиотеки: Чтобы создать статическую библиотеку, вам следует сначала убедиться, что у вас есть программы на C, которые можно поместить в вашу новую библиотеку! Эти программы, которые по соглашению будут заканчиваться на «.c», должны будут пройти первые три этапа процесса компиляции, чтобы быть включенными в вашу статическую библиотеку. Вы можете использовать флаг команды «-c» при компиляции, чтобы получить файл объектного кода, выдаваемый из первых трех фаз программы компиляции (остановка непосредственно перед фазой компоновки). Например: вы можете использовать команду:

gcc -c имя файла.c

Это приведет к созданию нового объектного файла с именем «filename.o». Этот объектный файл можно использовать в статической библиотеке, которую вы собираетесь создать.

Для создания самой статической библиотеки вы можете использовать программу с именем «ar» (строго говоря, статические библиотеки по сути являются архивными файлами, откуда «ar» означает «архиватор»). Давайте рассмотрим следующий пример:

ar rc libstatlibname.a имя файлаa.o имя файлаb.o имя файлаc.o

Здесь команда «ar» создает библиотеку или, если она уже существует, добавляет или заменяет следующие объектные файлы; флаг «r» указывает на то, что если в библиотеке уже есть объектные файлы с таким именем, их следует обновить до добавляемых новых файлов; флаг «c» указывает на то, что библиотека должна быть создана, если она еще не существует.

Как упоминалось выше, одной из самых полезных функций библиотеки является индекс. Некоторые компиляторы создают индекс при использовании архиватора (иногда команда может отличаться от «ar»). Если это не так, вы можете проиндексировать статическую библиотеку с помощью команды «ranlib».

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

gcc main.o -L. -statlibname -o имя программы

Здесь мы вызываем коллекцию компилятора GNU для компиляции нашего объектного файла main.o вместе с флагом -L, который указывает путь к библиотеке в текущем каталоге, за которым следует имя библиотеки. Обратите внимание, что имя библиотеки было изменено; в этом контексте вы можете опустить префикс «lib-», а также суффикс «.o». И, наконец, мы используем «-o имя_программы», чтобы указать компилятору создать файл «имя_программы» в качестве результирующего исполняемого файла (без этого, и если вы не укажете свое намерение, компилятор создаст исполняемый файл с общим именем « а. вне").

Поздравляем! Теперь вы можете использовать статические библиотеки при программировании на C! С твоей новой суперспособностью будь осторожен. Имейте в виду, что компоновщик будет искать разделяемую библиотеку с именем, похожим на ваше (следуя нашему предыдущему примеру, «libstatlibname.so» вместо «libstatlibname.a»), и если он найдет ее, он будет использовать ее вместо вашей статической библиотеки. библиотека! Так что будьте осторожны, если вы создаете как статические, так и разделяемые библиотеки с одинаковыми именами. И, наконец, если вам нужно переместить библиотеку в другое место, используйте команду «cp -p», а не только «cp», чтобы все атрибуты файла, такие как права доступа, владелец и даты модификации, остались нетронутыми. Это также заставит компилятор считать индекс текущим или обновленным.

Сохраните себе этот читательский билет!