Библиоте́ка (от ) в программировании — сборник подпрограмм или объектов, используемых для разработки программного обеспечения (ПО). С точки зрения операционной системы (ОС) и прикладного ПО, библиотеки разделяются на динамические и статические.
Термин «библиотека подпрограмм», по всей видимости, одними из первых упомянули Уилкс М., Уиллер Д., Гилл С. в качестве одной из форм организации вычислений на компьютереУилкс М., Уиллер Д., Гилл С. «Составление программ для электронных счётных машин». Издательство иностранной литературы, 1953. Исходя из изложенного в их книге, под библиотекой понимался набор «коротких, заранее заготовленных программ для отдельных, часто встречающихся (стандартных) вычислительных операций».
Библиотеки для компилируемых языков
Динамические библиотеки Динамическая библиотека — файл, содержащий машинный код. Загружается в память процесса загрузчиком программ операционной системы либо при создании процесса, либо по запросу уже работающего процесса, то есть динамически.
+ Расширения имен файлов динамических библиотек в разных ОС Расширение ОС Расшифровка Примечание so UNIX dylib Mac OS library AmigaOS Хранятся в логическом томе Libs: dll Microsoft Windows, OS/2
В зависимости от назначения различают: Библиотеки, используемые одной программой и содержащие критические для работы программы функции. Недостаток: при отсутствии библиотеки программа не сможет работать; Библиотеки, используемые одной программой и содержащие дополнительные функции. Например, библиотеки плагинов используются для расширения функционала программы; Библиотеки общего пользования (). Содержат функции, используемые несколькими программами. Могут загружаться в адресное пространство ОС () для экономии памяти: одна копия библиотеки будет использоваться несколькими процессами. В силу последнего обстоятельства такие библиотеки нередко называют разделяемыми.
При написании программы программисту достаточно указать транслятору (компилятору или интерпретатору) путь к библиотеке и имя функции. Ни исходный текст функции, ни её исполняемый код в состав программы не войдут.
Достоинства: экономия памяти за счёт использования одной библиотеки несколькими процессами; возможность исправления ошибок (достаточно заменить файл библиотеки и перезапустить работающие программы) без изменения кода основной программы.
Недостатки: возможность нарушения API , — при внесении изменений в библиотеку существующие программы могут перестать работать (утратят совместимость по интерфейсу); конфликт версий динамических библиотек, — разные программы могут нуждаться в разных версиях библиотеки; доступность одинаковых функций по одинаковым адресам в разных процессах, — упрощает эксплуатацию уязвимостей (для решения проблемы изобретён pic).
Статические библиотеки Статическая библиотека — объектный файл в виде файла (нередко может быть поставлен вместе с исходным кодом), код из которого выборочно или полностью вставляется в программу на этапе компоновки.
Библиотеки, распространяемые в виде исходного кода, преобразуются транслятором в объектные файлы. Затем компоновщик соединяет объектные файлы библиотек и объектные файлы вашей программы в один исполняемый файл.
Например, в исходных текстах распространяются: библиотеки для языка Fortran; библиотека Boost для языка C++.
Библиотеки, распространяемые в виде объектных файлов, уже готовы к компоновке. Компоновщик выполняет соединение объектных файлов библиотек и объектных файлов вашей программы во время создания исполняемого файла.
Расширения объектных файлов статических библиотек в разных ОС.
Расширение ОС «a» UNIX «lib» Microsoft Windows
Стандартные библиотеки многих компилируемых языков программирования (Fortran, Pascal, C, C++ и других) распространяются в виде объектных файлов.
Достоинства: все необходимые функции включаются в один исполняемый файл.
Недостатки: исполняемый файл занимает больше места на диске и в памяти, (если присоединяет код из объектных библиотечных файлов целиком, а не выборочно); при обнаружении ошибок в библиотеке требуется пересборка всех программ.
Библиотеки для интерпретируемых языков Библиотека — файл, содержащий либо код на интерпретируемом языке, либо байт-код для виртуальной машины.
Например, библиотеки для языка Python могут распространяться либо в виде файлов с исходным кодом (расширение «py»), либо в виде файлов с байт-кодомКомпиляция файлов python . Документация языка Python на сайте docs.python.org. (расширение «pyc», буква «c» от ). Одной из библиотек для языка Python является Tkinter.
См. также Компоновщик Автосвязывание
Примечания
Литература