1. Что такое библиотека в программировании на C?

Библиотека — это файл, созданный для хранения макросов, определений и функций. Причина, по которой у нас должна быть библиотека, заключается в том, что она сэкономит ваше время при повторении кода. Вы можете использовать свою библиотеку везде и всегда, пока она у вас есть (или вы можете получить к ней доступ). Однако представьте себе физическую городскую библиотеку, в ней будет все больше и больше книг, и ей потребуется много места для хранения. Библиотека C такая же. Программирование не хочет помещать все в одну библиотеку, поэтому оно было разделено на множество библиотек, зависящих от основной функции. В итоге имеем stdio.h, stdlib.h, math.h, limit.h. Итак, если нам нужно написать программу для вывода строки «Hello World!», нам достаточно stdio.h.

Но этого недостаточно, если вы хотите построить что-то конкретное. Доступных библиотек C недостаточно для завершения проекта. Пришло время подумать о создании собственной библиотеки.

2. Статическая библиотека

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

Теперь он готов к использованию.

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

3. Динамическая библиотека

Другой способ создания библиотеки — создание динамической библиотеки. Почему он должен быть динамическим и как его создать?

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

Чтобы создать динамическую библиотеку, мы скомпилируем ваши файлы функций по следующему синтаксису:

Флаг -g включает отладочную информацию в скомпилированную программу.

Флаг -fPIC означает генерацию Pпозиции Iнезависимого C, что является требованием для разделяемых библиотек. Поскольку невозможно узнать, где будет находиться код общей библиотеки, этот флаг позволяет размещать код по любому виртуальному адресу во время выполнения.

Флаг -shared создает общую библиотеку (общие библиотеки имеют префикс lib и суффикс .so [для s заяц oобъект].

Возможно, вы захотите добавить путь к библиотеке в переменную среды.

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

Затем используйте его при компиляции с вашей основной программой.

Теперь ваша программа включает динамическую библиотеку.

4. Сравните статическую библиотеку и динамическую библиотеку

Обратите внимание на красные знаки «плюс» в приведенной выше таблице. Он показывает преимущество/недостаток для каждого способа.

Поскольку системе необходимо получить доступ к адресу, где находится динамическая библиотека, обработка занимает больше времени. Однако это делает динамическую библиотеку переносимой и простой в обслуживании.

5. Что мне использовать?

Это зависит от того, насколько нужна ваша программа и кто является пользователем.

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

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

Комбинированный способ подойдет для вашей конкретной программы.

Спасибо за чтение.

Статья взята с http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html



https://medium.com/@JackWanaCode/static-library-create-and-use-d9f55a02f7c2

gcc -g -wall -o prog prog.c liball.so