Очень рудиментарной концепцией в C являются статические и динамические библиотеки. Функции, организованные в библиотеки, помогают уменьшить использование памяти компьютером, когда ваш код извлекает функции для выполнения программы. Очень важно знать, почему мы пишем #include ‹stdio.h› при написании c-программы и как формируется эта библиотека. Эта статья в основном будет сосредоточена на создании динамической библиотеки, но если вы заинтересованы в создании статической библиотеки, вы можете посетить мою предыдущую статью о статических библиотеках.

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

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

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

$ gcc -Стена -fPIC -c *.c

Этот шаг генерирует объектный код для всех файлов в вашем каталоге, которые заканчиваются на .c (поскольку мы использовали подстановочный знак «*»).

  • -Wall- флаг, используемый для отображения любых предупреждений
  • -fPIC- Позиционировать независимый код, который используется разделяемыми библиотеками.
  • -c- флаг, используемый для создания объектных файлов (.o).

$ gcc -shared -o my_library.so *.o

Этот шаг создает библиотеку с именем my_library.so (например).

  • -shared — создает общий объект, который затем может быть связан с другими объектами для формирования исполняемого файла.
  • -o- Опция, используемая для обозначения вывода операции, в данном случае это my_library.so.
  • *.o — Использование подстановочного знака (*) включает все файлы с расширением .o в текущем каталоге, которые будут использоваться в библиотеке.

Чтобы начать использовать библиотеку-

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

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

Для получения дополнительной информации, пожалуйста, ознакомьтесь со следующими ресурсами:

Использованная литература-





http://www.geeksforgeeks.org/static-vs-dynamic-libraries/