Vvmebel.com

Новости с мира ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Библиотека в программировании

Библиотеки

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

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

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

При компиляции программы библиотеки подключаются линковщиком, который вызывается gcc. Если программе требуются только стандартные библиотеки, то дополнительных параметров линковщику передавать не надо (есть исключения). Он «знает», где стандартные библиотеки находятся, и подключит их автоматически. Во всех остальных случаях при компиляции программы требуется указать имя библиотеки и ее местоположение.

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

Далее будет описан пример, в котором создается библиотека, после чего используется при создании программы.

Пример создания библиотеки

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

В итоге, когда все будет сделано, схема каталогов и файлов будет выглядеть так:

Пусть каталоги library и project находятся в одном общем каталоге, например, домашнем каталоге пользователя. Каталог library содержит каталог source с файлами исходных кодов библиотеки. Также в library будут находиться заголовочный файл (содержащий описания функций библиотеки), статическая (libmy1.a) и динамическая (libmy2.so) библиотеки. Каталог project будет содержать файлы исходных кодов проекта и заголовочный файл с описанием функций проекта. Также после компиляции с подключением библиотеки здесь будет располагаться исполняемый файл проекта.
В операционных системах GNU/Linux имена файлов библиотек должны иметь префикс «lib», статические библиотеки — расширение *.a, динамические — *.so.

Для компиляции проекта достаточно иметь только одну библиотеку: статическую или динамическую. В образовательных целях мы получим обе и сначала скомпилируем проект со статической библиотекой, потом — с динамической. Статическая и динамическая «разновидности» одной библиотеки по-идее должны называться одинаково (различаются только расширения). Поскольку у нас обе библиотеки будут находиться в одном каталоге, то чтобы быть уверенными, что при компиляции проекта мы используем ту, которую хотим, их названия различны (libmy1 и libmy2).

Исходный код библиотеки

В файле figure.c содержатся две функции — rect() и diagonals() . Первая принимает в качестве аргументов символ и два числа и «рисует» на экране с помощью указанного символа прямоугольник заданной ширины и высоты. Вторая функция выводит на экране две диагонали квадрата («рисует» крестик).

В файле text.c определена единственная функция, принимающая указатель на символ строки. Функция выводит на экране звездочки в количестве, соответствующем длине указанной строки.

Заголовочный файл можно создать в каталоге source, но мы лучше сохраним его там, где будут библиотеки. В данном случае это на уровень выше (каталог library). Тем самым как бы подчеркивается, что файлы исходных кодов после создания из них библиотеки вообще не нужны пользователям библиотек, они нужны лишь разработчику библиотеки. А вот заголовочный файл библиотеки требуется для ее правильного использования.

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

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

Все действия, которые описаны ниже выполняются в каталоге library (т.е. туда надо перейти командой cd). Просмотр содержимого каталога выполняется с помощью команды ls или ls -l.

Получаем объектные файлы:

В итоге в каталоге library должно наблюдаться следующее:

Далее используем утилиту ar для создания статической библиотеки:

Параметр r позволяет вставить файлы в архив, если архива нет, то он создается. Далее указывается имя архива, после чего перечисляются файлы, из которых архив создается.

Объектные файлы нам не нужны, поэтому их можно удалить:

В итоге содержимое каталога library должно выглядеть так:

, где libmy1.a — это статическая библиотека.

Создание динамической библиотеки

Объектные файлы для динамической библиотеки компилируются особым образом. Они должны содержать так называемый позиционно-независимый код (position independent code). Наличие такого кода позволяет библиотеке подключаться к программе, когда последняя загружается в память. Это связано с тем, что библиотека и программа не являются единой программой, а значит как угодно могут располагаться в памяти относительно друг друга. Компиляция объектных файлов для динамической библиотеки должна выполняться с опцией -fPIC компилятора gcc:

В отличие от статической библиотеки динамическую создают при помощи gcc указав опцию -shared:

Использованные объектные файлы можно удалить:

В итоге содержимое каталога library:

Использование библиотеки в программе

Исходный код программы

Теперь в каталоге project (который у нас находится на одном уровне файловой иерархии с library) создадим файлы проекта, который будет использовать созданную библиотеку. Поскольку сама программа будет состоять не из одного файла, то придется здесь также создать заголовочный файл.

Функция data() запрашивает у пользователя данные, помещая их в массив strs. Далее вызывает библиотечную функцию diagonals() , которая выводит на экране «крестик». После этого на каждой итерации цикла вызывается библиотечная функция text() , которой передается очередной элемент массива; функция text() выводит на экране звездочки в количестве равному длине переданной через указатель строки.

Обратите внимание на то, как подключается заголовочный файл библиотеки: через относительный адрес. Две точки обозначают переход в каталог на уровень выше, т.е. родительский по отношению к project, после чего путь продолжается во вложенный в родительский каталог library. Можно было бы указать абсолютный путь, например, «/home/sv/c/les_21/library/mylib.h». Однако при перемещении каталогов библиотеки и программы на другой компьютер или в другой каталог адрес был бы уже не верным. В случае с относительным адресом требуется лишь сохранять расположение каталогов project и library относительно друг друга.

Здесь два раза вызывается библиотечная функция rect() и один раз функция data() из другого файла проекта. Чтобы сообщить функции main() прототип data() также подключается заголовочный файл проекта.

Файл project.h содержит всего одну строчку:

Из обоих файлов проекта с исходным кодом надо получить объектные файлы для объединения их потом с файлом библиотеки. Сначала мы получим исполняемый файл, содержащий статическую библиотеку, потом — связанный с динамической библиотекой. Однако с какой бы библиотекой мы не компоновали объектные файлы проекта, компилируются они как для статической, так и динамической библиотеки одинаково:

При этом не забудьте сделать каталог project текущим!

Компиляция проекта со статической библиотекой

Теперь в каталоге project есть два объектных файла: main.o и data.o. Их надо скомпилировать в исполняемый файл project, объединив со статической библиотекой libmy1.a. Делается это с помощью такой команды:

Начало команды должно быть понятно: опция -o указывает на то, что компилируется исполняемый файл project из объектных файлов.

Помимо объектных файлов проекта в компиляции участвует и библиотека. Об этом свидетельствует вторая часть команды: -L../library -lmy1. Здесь опция -L указывает на адрес каталога, где находится библиотека, он и следует сразу за ней. После опции -l записывается имя библиотеки, при этом префикс lib и суффикс (неважно .a или .so) усекаются. Обратите внимание, что после данных опций пробел не ставится.

Опцию -L можно не указывать, если библиотека располагается в стандартных для данной системы каталогах для библиотек. Например, в GNU/Linux это /lib/, /urs/lib/ и др.

Читать еще:  Как быстро научиться программировать на c

Запустив исполняемый файл project и выполнив программу, мы увидим на экране примерно следующее:

Посмотрим размер файла project:

Его размер равен 8698 байт.

Компиляция проекта с динамической библиотекой

Теперь удалим исполняемый файл и получим его уже связанным с динамической библиотекой. Команда компиляции с динамической библиотекой выглядит так:

Здесь в отличии от команды компиляции со статической библиотеки добавлены опции для линковщика: -Wl,-rpath. /library/. -Wl — это обращение к линковщику, -rpath — опция линковщика, ../library/ — значение опции. Получается, что в команде мы два раза указываем местоположение библиотеки: один раз с опцией -L, а второй раз с опцией -rpath. Видимо для того, чтобы понять, почему так следует делать, потребуется более основательно изучить процесс компиляции и компоновки программ на языке C.

Следует заметить, что если вы скомпилируете программу, используя приведенную команду, то исполняемый файл будет запускаться из командной строки только в том случае, если текущий каталог project. Стоит сменить каталог, будет возникать ошибка из-за того, что динамическая библиотека не будет найдена. Но если скомпилировать программу так:

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

Размер исполняемого файла проекта, связанного с динамической библиотекой, получился равным 8604 байта. Это немного меньше, чем при компиляции проекта со статической библиотекой. Если посмотреть на размеры библиотек:

, то видно, что динамическая больше статической, хотя исполняемый файл проекта со статической библиотекой больше. Это доказывает, что в исполняемом файле, связанном с динамической библиотекой, присутствует лишь ссылка на нее.

Библиотека в программировании

вйвмйпфелб ртпзтбнн — ПТЗБОЙЪПЧБООБС ОБ НБЫЙООПН ОПУЙФЕМЕ УПЧПЛХРОПУФШ ЛПНРШАФЕТОЩИ РТПЗТБНН, ДПУФХР Л ЛПФПТЩН ПУХЭЕУФЧМСЕФУС РП ЙИ ЙНЕОБН (ЙМЙ ЙОДЕЛУБН). в.Р. ХУЛПТСЕФ Й ПВМЕЗЮБЕФ РТПГЕУУ УПЪДБОЙС РПМШЪПЧБФЕМШУЛПК РТПЗТБННЩ, РПЪЧПМСС РТЙНЕОСФШ Ч ЛБЮЕУФЧЕ УПУФБЧОЩИ ЮБУФЕК ХЦЕ ЗПФПЧЩЕ ЖХОЛГЙЙ (РПДРТПЗТБННЩ), ДМС ЮЕЗП ДПУФБФПЮОП ХЛБЪБФШ ЙНС УППФЧЕФУФЧХАЭЕК ЖХОЛГЙЙ. вМБЗПДБТС в.Р. РТПГЕУУ РТПЗТБННЙТПЧБОЙС УФБОПЧЙФУС ВПМЕЕ ФЕИОПМПЗЙЮОЩН, Б УБНБ РПМШЪПЧБФЕМШУЛБС РТПЗТБННБ МЕЗЮЕ ДМС ЧПУРТЙСФЙС. уХЭЕУФЧЕООПК ЮБУФША РТПЗТБННОПЗП ПВЕУРЕЮЕОЙС в.Р. СЧМСЕФУС ОБВПТ УЕТЧЙУОЩИ РТПЗТБНН (ХФЙМЙФ), ПВЕУРЕЮЙЧБАЭЙИ УПЪДБОЙЕ ВЙВМЙПФЕЛЙ, ЧЛМАЮЕОЙЕ Й ЙУЛМАЮЕОЙЕ ЖХОЛГЙК (РПДРТПЗТБНН), ЧЩЧПД ПЗМБЧМЕОЙС Й ДТ.

в.Р. НПЗХФ УПУФПСФШ ЙЪ ПВЯЕЛФОЩИ НПДХМЕК (ДЧПЙЮОЩИ ЖБКМПЧ, РПМХЮЕООЩИ Ч ТЕЪХМШФБФЕ ФТБОУМСГЙЙ), ЙМЙ ФЕЛУФПЧ РТПЗТБНН ОБ ЙУИПДОПН СЪЩЛЕ РТПЗТБННЙТПЧБОЙС. вЙВМЙПФЕЛБ ПВЯЕЛФОЩИ НПДХМЕК — ЬФП, ЛБЛ РТБЧЙМП, ЖБКМ, УПУФПСЭЙК ЙЪ ЪБЗПМПЧЛБ Й РПУМЕДПЧБФЕМШОП ТБУРПМПЦЕООЩИ ПВЯЕЛФОЩИ НПДХМЕК. ч ЪБЗПМПЧЛЕ УПДЕТЦЙФУС УРЙУПЛ ЧУЕИ НПДХМЕК У ХЛБЪБОЙЕН УНЕЭЕОЙС ЛБЦДПЗП ЙЪ ОЙИ ПФ ОБЮБМБ ВЙВМЙПФЕЛЙ. лПЗДБ ЗМБЧОБС РТПЗТБННБ РТСНП ЙМЙ ЛПУЧЕООП ЧЩЪЩЧБЕФ ВЙВМЙПФЕЮОХА ЖХОЛГЙА, ТЕДБЛФПТ УЧСЪЕК ОБИПДЙФ ПРТЕДЕМЕОЙЕ ЬФПК ЖХОЛГЙЙ Ч ЪБЗПМПЧЛЕ в.Р. Й ДПВБЧМСЕФ УППФЧЕФУФЧХАЭЙК НПДХМШ Л ЗМБЧОПК РТПЗТБННЕ, УПЪДБЧБС ЕДЙОЩК ЙУРПМОСЕНЩК ЖБКМ. ч НХМШФЙЪБДБЮОПК ПРЕТБГЙПООПК УЙУФЕНЕ ФБЛБС УФБФЙЮЕУЛБС ЛПНРПОПЧЛБ ОЕЬЖЖЕЛФЙЧОБ, ФБЛ ЛБЛ РТЙЧПДЙФ Л ОЕЬЛПОПНОПНХ ЙУРПМШЪПЧБОЙА ПРЕТБФЙЧОПК РБНСФЙ. оБРТ., ЕУМЙ ДЧЕ ПДОПЧТЕНЕООП ЧЩРПМОСЕНЩЕ РТПЗТБННЩ ЧЩЪЩЧБАФ ПДОХ ЖХОЛГЙА, ФП Ч РБНСФЙ ВХДХФ ОБИПДЙФШУС ДЧЕ ЛПРЙЙ ЬФПК ЖХОЛГЙЙ. дЙОБНЙЮЕУЛЙ УЧСЪЩЧБЕНЩЕ (ЛПНРПОХЕНЩЕ) ВЙВМЙПФЕЛЙ, Ч ПФМЙЮЙЕ ПФ УФБФЙЮЕУЛЙИ, РПДЛМАЮБАФУС Л ПУОПЧОПК РТПЗТБННЕ ОЕРПУТЕДУФЧЕООП ЧП ЧТЕНС ПВТБЭЕОЙС Л ВЙВМЙПФЕЮОПК ЖХОЛГЙЙ. чП ЧТЕНС ЛПНРПОПЧЛЙ РТПЗТБННЩ Ч ЖБКМЕ УПЪДБЕФУС УУЩМЛБ ОБ в.Р., ЛПФПТБС ЙУРПМШЪХЕФУС ДМС ДЙОБНЙЮЕУЛПЗП ЧЛМАЮЕОЙС УППФЧЕФУФЧХАЭЕК ВЙВМЙПФЕЛЙ Ч БДТЕУОПЕ РТПУФТБОУФЧП ЧЩЪЩЧБАЭЕЗП РТПГЕУУБ РТЙ ЕЗП ЧЩРПМОЕОЙЙ. фБЛЙН ПВТБЪПН, РПСЧМСЕФУС ЧПЪНПЦОПУФШ ПДОПЧТЕНЕООПЗП ЙУРПМШЪПЧБОЙС (ТБЪДЕМЕОЙС) ДЙОБНЙЮЕУЛЙИ ВЙВМЙПФЕЛ ОЕУЛПМШЛЙНЙ РТПГЕУУБНЙ. йУРПМШЪПЧБОЙЕ ДЙОБНЙЮЕУЛЙИ ВЙВМЙПФЕЛ УПЛТБЭБЕФ ПВЯЕН РТПЗТБННЩ, ОП ОЕУЛПМШЛП ХУМПЦОСЕФ ХУФБОПЧЛХ РТЙМПЦЕОЙС, РПУЛПМШЛХ ПОП ОХЦДБЕФУС ЕЭЕ Й Ч УППФЧЕФУФЧХАЭЙИ ВЙВМЙПФЕЮОЩИ ЖБКМБИ.

рТПЗТБННЙУФЩ НПЗХФ УПЪДБФШ УЧПЙ УПВУФЧЕООЩЕ в.Р. пДОБЛП ДМС ЧЩРПМОЕОЙС ЮБУФП РПЧФПТСАЭЙИУС Ч ТБЪМЙЮОЩИ РТПЗТБННБИ ПРЕТБГЙК (ОБРТ., ЧЧПДБ-ЧЩЧПДБ, ХРТБЧМЕОЙС РБНСФША, ЧЩЮЙУМЕОЙС ЬМЕНЕОФБТОЩИ НБФЕНБФЙЮ. ЖХОЛГЙК Й ДТ.), ЛБЛ РТБЧЙМП, РТЙНЕОСАФ ЖХОЛГЙЙ ЙЪ УФБОДБТФОЩИ ВЙВМЙПФЕЛ, ЛПФПТЩЕ РПУФБЧМСАФУС ЧНЕУФЕ У ФТБОУМСФПТПН СЪЩЛБ ЙМЙ У ПРЕТБГЙПООПК УЙУФЕНПК. уЙУФЕНЩ РТПЗТБННЙТПЧБОЙС ДМС ОЕЛПФПТЩИ СЪЩЛПЧ (ОБРТ., жПТФТБОБ) РТПДПМЦБАФ УХЭЕУФЧПЧБФШ ЧП НОПЗПН ВМБЗПДБТС ФПНХ, ЮФП ДМС ОЙИ ТБЪТБВПФБО ТБЪЧЙФЩК БРРБТБФ ВЙВМЙПФЕЮОЩИ ЖХОЛГЙК. рТЙ ЧЩРПМОЕОЙЙ ПРТЕДЕМЕООЩИ УПЗМБЫЕОЙК в.Р. НПЦОП ЙУРПМШЪПЧБФШ Ч РТПЗТБННОЩИ РТПЕЛФБИ, ТЕБМЙЪХЕНЩИ ОБ ОЕУЛПМШЛЙИ СЪЩЛБИ РТПЗТБННЙТПЧБОЙС.

дПУФПЙОУФЧПН в.Р. ОБ ЙУИПДОПН СЪЩЛЕ РТПЗТБННЙТПЧБОЙС УЮЙФБЕФУС ЙИ ОЕЪБЧЙУЙНПУФШ ПФ ЛПОЛТЕФОПЗП ФЙРБ ЧЩЮЙУМЙФЕМШОПК УЙУФЕНЩ. юБУФП ФБЛБС ОЕЪБЧЙУЙНПУФШ ПВЕУРЕЮЙЧБЕФУС ЧЛМАЮЕОЙЕН Ч ФЕЛУФЩ ВЙВМЙПФЕЮОЩИ РТПЗТБНН ДЙТЕЛФЙЧ ХУМПЧОПК ЛПНРЙМСГЙЙ, РПДУФТБЙЧБАЭЙИ РТПЗТБННХ РПД ЛПОЛТЕФОЩК ФЙР ЛПНРШАФЕТБ Й ЕЗП ПРЕТБГЙПООХА УЙУФЕНХ ЧП ЧТЕНС РТПГЕУУБ ЛПНРЙМСГЙЙ. ьФЙ в.Р. ЬЖЖЕЛФЙЧОП ЙУРПМШЪХАФУС РТЙ ТЕЫЕОЙЙ ОБХЮОЩИ Й ЙОЦЕОЕТОЩИ ЪБДБЮ. хУМПЧОП ЙИ НПЦОП ТБЪДЕМЙФШ ОБ ВЙВМЙПФЕЛЙ ПВЭЕЗП ОБЪОБЮЕОЙС, ЙУРПМШЪХЕНЩЕ ДМС ТЕЫЕОЙС ЪБДБЮ Ч ТБЪМЙЮОЩИ ПВМБУФСИ, Й УРЕГЙБМЙЪЙТПЧБООЩЕ ВЙВМЙПФЕЛЙ. оБРТ., Ч 1970-80-И ЗЗ. УРЕГЙБМЙУФБНЙ пйсй (дХВОБ), нзх, жьй (пВОЙОУЛ) Й ДТ. ВЩМЙ УПЪДБОЩ в.Р. ДМС ПВТБВПФЛЙ УРЕЛФТПНЕФТЙЮЕУЛПК ЙОЖПТНБГЙЙ, РПМХЮБЕНПК Ч ИПДЕ ЬЛУРЕТЙНЕОФБМШОЩИ ЙУУМЕДПЧБОЙК, ВЙВМЙПФЕЛБ ЮЙУМЕООПЗП БОБМЙЪБ нзх, ЙЕТБТИЙС ВЙВМЙПФЕЛ ПРЕТБГЙПООПК УЙУФЕНЩ «дХВОБ». нОПЗЙЕ РТПЗТБННЩ ЙЪ ЬФЙИ ВЙВМЙПФЕЛ ДП УЙИ РПТ РТЙНЕОСАФУС ОБ УПЧТЕНЕООЩИ ЧЩЮЙУМЙФ. УЙУФЕНБИ. ыЙТПЛП ЙЪЧЕУФОЩ Й БЛФЙЧОП ЙУРПМШЪХАФУС Ч ОБЫЕК УФТБОЕ НЕЦДХОБТПДОЩЕ в.Р., ФБЛЙЕ ЛБЛ CERNLIB еЧТПРЕКУЛПЗП гЕОФТБ сДЕТОЩИ йУУМЕДПЧБОЙК (ыЧЕКГБТЙС), CPC (Computer Physics Communications) Й NAG (Numerical Algorithms Group), РТЕДОБЪОБЮЕООЩЕ ДМС ТЕЫЕОЙС ЪБДБЮ ЖЙЪЙЛЙ, НБФЕНБФЙЛЙ, ИЙНЙЙ Й ДТ. УНЕЦОЩИ ПВМБУФЕК ЪОБОЙК.

в. Р., ОБРЙУБООЩЕ ОБ ПВЯЕЛФОП-ПТЙЕОФЙТПЧБООЩИ СЪЩЛБИ, ФБЛЙИ ЛБЛ у++ ЙМЙ Object Pascal, ТЕБМЙЪХАЭЙЕ ВБЪПЧЩК ОБВПТ РПОСФЙК ОЕЛПФПТПК РТЕДНЕФОПК ПВМБУФЙ, ЮБУФП ОБЪЩЧБАФ ВЙВМЙПФЕЛБНЙ ЛМБУУПЧ (ЛПНРПОЕОФПЧ). оБРТ., ВЙВМЙПФЕЛЙ УФБОДБТФОЩИ ЬМЕНЕОФПЧ ЗТБЖЙЮЕУЛПЗП ЙОФЕТЖЕКУБ (НЕОА, РПМПУЩ РТПЛТХФЛЙ, УРЙУЛЙ, ЖМБЦЛЙ, ЛОПРЛЙ, ПЛОБ Й ДТ.). вЙВМЙПФЕЛЙ ЛМБУУПЧ РПЪЧПМСАФ ХРТПУФЙФШ ТБЪТБВПФЛХ РТЙМПЦЕОЙК, ЙНЕАЭЙИ УМПЦОЩК ЙОФЕТЖЕКУ, ПВМЕЗЮЙФШ ЧЪБЙНПДЕКУФЧЙЕ У ВБЪБНЙ ДБООЩИ Й Ф.Д.

мЙФЕТБФХТБ:

  1. нБЪОЩК з.м., рТПЗТБННЙТПЧБОЙЕ ОБ вьун-6 Ч УЙУФЕНЕ «дХВОБ» — н., 1978.
  2. зПТДЕЕЧ б.ч., нПМЮБОПЧ б.а., уЙУФЕНОПЕ РТПЗТБННОПЕ ПВЕУРЕЮЕОЙЕ — «рЙФЕТ», уБОЛФ-рЕФЕТВХТЗ, 2001.

Библиотека (программирование)

: неверное или отсутствующее изображение

  • Найти и оформить в виде сносок ссылки на независимые авторитетные источники, подтверждающие написанное.К:Википедия:Статьи без источников (тип: не указан)
  • Проставив сноски, внести более точные указания на источники.

В некоторых языках программирования (например, в Python) то же, что и модуль, в некоторых — несколько модулей. С точки зрения операционной системы (ОС) и прикладного ПО, библиотеки разделяются на динамические и статические.

Термин «библиотека подпрограмм», по всей видимости, одними из первых упомянули Уилкс М., Уиллер Д., Гилл С. в качестве одной из форм организации вычислений на компьютере [1] [2] . Исходя из изложенного в их книге, под библиотекой понимался набор «коротких, заранее заготовленных программ для отдельных, часто встречающихся (стандартных) вычислительных операций» [3] .

Содержание

Библиотеки для компилируемых языков

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

Динамическая библиотека — файл, содержащий машинный код. Загружается в память процесса загрузчиком программ операционной системы либо при создании процесса, либо по запросу уже работающего процесса, то есть динамически.

Расширения файлов динамических библиотек в разных ОС.

В зависимости от назначения различают:

  • библиотеки, используемые одной программой и содержащие критические для работы программы функции. Недостаток: при отсутствии библиотеки программа не сможет работать;
  • библиотеки, используемые одной программой и содержащие дополнительные функции. Например, библиотеки плагинов используются для расширения функциональности программы;
  • библиотеки общего пользования (англ.shared library ). Содержат функции, используемые несколькими программами. Могут загружаться в адресное пространство ОС (англ.system library ) для экономии памяти: одна копия библиотеки будет использоваться несколькими процессами.

При написании программы программисту достаточно указать транслятору (компилятору или интерпретатору) путь к библиотеке и имя функции. Ни исходный текст функции, ни её исполняемый код в состав программы не войдут.

  • экономия памяти за счёт использования одной библиотеки несколькими процессами;
  • возможность исправления ошибок (достаточно заменить файл библиотеки и перезапустить работающие программы).
  • возможность нарушения API (при внесении изменений в библиотеку существующие программы могут перестать работать);
  • конфликт версий динамических библиотек (разные программы могут ожидать разные версии библиотек);
  • доступность одинаковых функций по одинаковым адресам в разных процессах (упрощает эксплуатацию уязвимостей; для решения проблемы изобретён pic (англ.) ).

Статические библиотеки

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

Библиотеки, распространяемые в виде исходного кода, преобразуются компилятором в объектные файлы. Затем компоновщик соединяет объектные файлы библиотек и объектные файлы вашей программы в один исполняемый файл.

Например, в исходных текстах распространяются:

  • библиотеки для языка Fortran;
  • библиотека Boost для языка C++.

Библиотеки, распространяемые в виде объектных файлов, уже готовы к компоновке. Компоновщик выполняет соединение объектных файлов библиотек и объектных файлов вашей программы во время создания исполняемого файла.

Читать еще:  Объект в программировании

Расширения объектных файлов статических библиотек в разных ОС.

Стандартные библиотеки многих компилируемых языков программирования (Fortran, Pascal, C, C++ и других) распространяются в виде объектных файлов.

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

Библиотеки для интерпретируемых языков

Библиотека — файл, содержащий либо код на интерпретируемом языке, либо байт-код для виртуальной машины.

Например, библиотеки для языка Python могут распространяться либо в виде файлов с исходным кодом (расширение «py»), либо в виде файлов с байт-кодом [4] (расширение «pyc», буква «c» от англ. compiled ).

См. также

Напишите отзыв о статье «Библиотека (программирование)»

Примечания

  1. Wilkes M. V., Wheeler D. J., Gill S. Preparation of programs for an electronic digital computer. — Addison-Wesley, 1951.
  2. Уилкс М., Уиллер Д., Гилл С. «Составление программ для электронных счётных машин». Издательство иностранной литературы, 1953
  3. [www.dissercat.com/content/tekhnologiya-mnogomashinnoi-realizatsii-i-zhizneobespecheniya-bibliotek-podprogramm-vychisli Волченскова, Надежда Ивановна, Технология многомашинной реализации и жизнеобеспечения библиотек подпрограмм вычислительной математики на языке Фортран, автореферат к диссертации, 1984]
  4. [docs.python.org/3/tutorial/modules.html#compiled-python-files Компиляция файлов python]. Документация языка Python на сайте docs.python.org.

Литература

Николай Джосьютис. C++ Стандартная библиотека. Для профессионалов = The C++ Standart Library. A Tutorial and Reference. — СПб. : Питер, 2004. — 730 с. — ISBN 5-94723-635-4.

Отрывок, характеризующий Библиотека (программирование)

Гостья махнула рукой.
– У него их двадцать незаконных, я думаю.
Княгиня Анна Михайловна вмешалась в разговор, видимо, желая выказать свои связи и свое знание всех светских обстоятельств.
– Вот в чем дело, – сказала она значительно и тоже полушопотом. – Репутация графа Кирилла Владимировича известна… Детям своим он и счет потерял, но этот Пьер любимый был.
– Как старик был хорош, – сказала графиня, – еще прошлого года! Красивее мужчины я не видывала.
– Теперь очень переменился, – сказала Анна Михайловна. – Так я хотела сказать, – продолжала она, – по жене прямой наследник всего именья князь Василий, но Пьера отец очень любил, занимался его воспитанием и писал государю… так что никто не знает, ежели он умрет (он так плох, что этого ждут каждую минуту, и Lorrain приехал из Петербурга), кому достанется это огромное состояние, Пьеру или князю Василию. Сорок тысяч душ и миллионы. Я это очень хорошо знаю, потому что мне сам князь Василий это говорил. Да и Кирилл Владимирович мне приходится троюродным дядей по матери. Он и крестил Борю, – прибавила она, как будто не приписывая этому обстоятельству никакого значения.
– Князь Василий приехал в Москву вчера. Он едет на ревизию, мне говорили, – сказала гостья.
– Да, но, entre nous, [между нами,] – сказала княгиня, – это предлог, он приехал собственно к графу Кирилле Владимировичу, узнав, что он так плох.
– Однако, ma chere, это славная штука, – сказал граф и, заметив, что старшая гостья его не слушала, обратился уже к барышням. – Хороша фигура была у квартального, я воображаю.
И он, представив, как махал руками квартальный, опять захохотал звучным и басистым смехом, колебавшим всё его полное тело, как смеются люди, всегда хорошо евшие и особенно пившие. – Так, пожалуйста же, обедать к нам, – сказал он.

Наступило молчание. Графиня глядела на гостью, приятно улыбаясь, впрочем, не скрывая того, что не огорчится теперь нисколько, если гостья поднимется и уедет. Дочь гостьи уже оправляла платье, вопросительно глядя на мать, как вдруг из соседней комнаты послышался бег к двери нескольких мужских и женских ног, грохот зацепленного и поваленного стула, и в комнату вбежала тринадцатилетняя девочка, запахнув что то короткою кисейною юбкою, и остановилась по средине комнаты. Очевидно было, она нечаянно, с нерассчитанного бега, заскочила так далеко. В дверях в ту же минуту показались студент с малиновым воротником, гвардейский офицер, пятнадцатилетняя девочка и толстый румяный мальчик в детской курточке.
Граф вскочил и, раскачиваясь, широко расставил руки вокруг бежавшей девочки.
– А, вот она! – смеясь закричал он. – Именинница! Ma chere, именинница!
– Ma chere, il y a un temps pour tout, [Милая, на все есть время,] – сказала графиня, притворяясь строгою. – Ты ее все балуешь, Elie, – прибавила она мужу.
– Bonjour, ma chere, je vous felicite, [Здравствуйте, моя милая, поздравляю вас,] – сказала гостья. – Quelle delicuse enfant! [Какое прелестное дитя!] – прибавила она, обращаясь к матери.
Черноглазая, с большим ртом, некрасивая, но живая девочка, с своими детскими открытыми плечиками, которые, сжимаясь, двигались в своем корсаже от быстрого бега, с своими сбившимися назад черными кудрями, тоненькими оголенными руками и маленькими ножками в кружевных панталончиках и открытых башмачках, была в том милом возрасте, когда девочка уже не ребенок, а ребенок еще не девушка. Вывернувшись от отца, она подбежала к матери и, не обращая никакого внимания на ее строгое замечание, спрятала свое раскрасневшееся лицо в кружевах материной мантильи и засмеялась. Она смеялась чему то, толкуя отрывисто про куклу, которую вынула из под юбочки.
– Видите?… Кукла… Мими… Видите.
И Наташа не могла больше говорить (ей всё смешно казалось). Она упала на мать и расхохоталась так громко и звонко, что все, даже чопорная гостья, против воли засмеялись.
– Ну, поди, поди с своим уродом! – сказала мать, притворно сердито отталкивая дочь. – Это моя меньшая, – обратилась она к гостье.
Наташа, оторвав на минуту лицо от кружевной косынки матери, взглянула на нее снизу сквозь слезы смеха и опять спрятала лицо.
Гостья, принужденная любоваться семейною сценой, сочла нужным принять в ней какое нибудь участие.
– Скажите, моя милая, – сказала она, обращаясь к Наташе, – как же вам приходится эта Мими? Дочь, верно?
Наташе не понравился тон снисхождения до детского разговора, с которым гостья обратилась к ней. Она ничего не ответила и серьезно посмотрела на гостью.
Между тем всё это молодое поколение: Борис – офицер, сын княгини Анны Михайловны, Николай – студент, старший сын графа, Соня – пятнадцатилетняя племянница графа, и маленький Петруша – меньшой сын, все разместились в гостиной и, видимо, старались удержать в границах приличия оживление и веселость, которыми еще дышала каждая их черта. Видно было, что там, в задних комнатах, откуда они все так стремительно прибежали, у них были разговоры веселее, чем здесь о городских сплетнях, погоде и comtesse Apraksine. [о графине Апраксиной.] Изредка они взглядывали друг на друга и едва удерживались от смеха.
Два молодые человека, студент и офицер, друзья с детства, были одних лет и оба красивы, но не похожи друг на друга. Борис был высокий белокурый юноша с правильными тонкими чертами спокойного и красивого лица; Николай был невысокий курчавый молодой человек с открытым выражением лица. На верхней губе его уже показывались черные волосики, и во всем лице выражались стремительность и восторженность.
Николай покраснел, как только вошел в гостиную. Видно было, что он искал и не находил, что сказать; Борис, напротив, тотчас же нашелся и рассказал спокойно, шутливо, как эту Мими куклу он знал еще молодою девицей с неиспорченным еще носом, как она в пять лет на его памяти состарелась и как у ней по всему черепу треснула голова. Сказав это, он взглянул на Наташу. Наташа отвернулась от него, взглянула на младшего брата, который, зажмурившись, трясся от беззвучного смеха, и, не в силах более удерживаться, прыгнула и побежала из комнаты так скоро, как только могли нести ее быстрые ножки. Борис не рассмеялся.

Языки программирования и библиотеки языков

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

Читать еще:  Программирование порта lpt в vba

Выбор языка разработки также определялся по возможностям и инструментам для решения поставленных задач. Популярных и удобных технологий разработки веб-приложений не так уж и много — это PHP 5, Ruby, Python, ASP.NET, Java.

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

Наиболее правильным, мне кажется, является выбор в сторону PHP 5. Данный язык является свободным и интенсивно применяется при разработке веб-приложений. Он обладает обширной поддержкой баз данных, имеет огромное количество библиотек и расширений. Значительно упросить процесс разработки можно за счёт использования специального расширения для выбранной СУБД MySQL.

PHP 5 выступает почти полноценной заменой проприетарной среды ASP от Microsoft и адаптирован для большинства операционных систем, включая Linux, многие модификации Unix (Solaris, OpenBSD), Microsoft Windows, Mac OS X и многие другие. Также в PHP включена поддержка большинства современных веб-серверов, таких как Apache, IIS и других, способных использовать бинарный файл FastCGI PHP.

Таким образом, выбор PHP 5 дает свободу выбора ОС и веб-сервера. Кроме того, PHP 5 может генерировать не только HTML, он способен осуществлять генерацию любых текстовых данных, например, XHTML и XML-файлов. Автоматическая генерация и сохранение таких файлов в файловой системе используемого веб-сервера позволяет организовывать серверный кэш для динамического содержимого.

PHP 5 позволяет применить шаблон MVC (модель-представление-контроллер), при котором управляющая логика поделена на три отдельных компонента таким образом, что модифицирование одного из них минимально влияет на остальные.

Классическим и наиболее популярным способом разработки веб-интерфейса является использование следующих технологий: языка разметки HTML с применением CSS, предназначенного для оформления внешнего вида веб-страниц.

Пользователь взаимодействует с приложением через браузер, что обеспечивается с помощью веб-интерфейса.

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

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

  • — Обладает высокой требовательностью к ресурсам процессора;
  • — Готовое приложение имеет очень большой объем;
  • — Требует обязательной установки дополнительного программного обеспечения, для проигрывания flash-сценариев;
  • — Закрытость исходного кода.

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

Главной и достаточно неплохой альтернативой Flash является JavaScript. Это скриптовый язык, зачастую применяющийся при создании сценариев поведения браузера, встраиваемых в веб-страницы. Однако за последние несколько лет появилось большое число сред, взявших за основу JavaScript и предлагающих более простую и удобную разработку. Одной из таких сред выступает специальная библиотека jQuery, которая фокусируется на взаимодействии JavaScript и HTML. Причины лидерства очевидны, ведь jQuery имеет достаточно преимуществ по сравнению с использованием стандартного JavaScript:

  • — Объем исходного кода jQuery намного меньше, чем объем стандартного кода JavaScript, что существенно сокращает временные затраты на разработку веб-элементов;
  • — Компоненты jQuery протестированы на всех популярных браузерах, что опять же уменьшает и упрощает создание и тестирование элементов;
  • — Библиотека jQuery постоянно обновляется, чтобы поддерживать совместимость с большинством браузеров;
  • — Огромное количество встраиваемых модулей, создаваемых сообществом пользователей библиотеки;
  • — За счет модульности и компактности функций, отладка продукта проходит быстрее.
  • — Хорошая документированность системы.

Библиотека позволяет создавать красивые выпадающие меню, плавные переходы, всплывающие подсказки и другие визуальные эффекты. Так же её большим преимуществом является реализация работы с AJAX.

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

Стоит подчеркнуть преимущества данного подхода:

  • — Сокращение и экономия трафика, потому что при загрузке веб-страницы достаточно загрузить только изменившуюся ее часть, или вообще получить набор данных в формате XML, а затем изменить содержимое страницы с помощью JS;
  • — Снижение нагрузки на сервер;
  • — Динамически загружаемое содержимое недоступно поисковикам;
  • — Увеличение скорость работы интерфейса;
  • — Богатый функционал для интерактивной обработки (например, отображение меняющихся со временем данных).

Помимо достоинств у AJAX есть и недостатки, такие как:

  • — Отсутствие интеграция со стандартными инструментами браузера — динамически создаваемые страницы не регистрируются браузером в истории, поэтому не работает кнопка «назад»;
  • — Низкая скорость работы при большом количестве AJAX-запросов на одной странице.

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

Рисунок 13. Модель классических приложений для сети (слева) в прямом сравнении с применением AJAX (справа)

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

Библиотека в программировании

Библиотека в программировании (Library) – это сборник подпрограмм или объектов, используемых для разработки программ. Можно сказать и так: это набор классов, компонентов или модулей для разных задач.

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

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

Библиотеки для программирования бывают встроенными и дополнительными. У каждого языка есть свои библиотеки. Примеры. Библиотеки для Ruby ищут на The Ruby Toolbox. У Java есть множество готовых классов в Java Standard Libraries, а также в JHipster и т. д. Для С++ существует Boost, а для Python – Simplejson или Requests (вторую используют такие гиганты, как Amazon и Spotify). Готовые классы для кода на Objective-C и Swift можно найти в UIKit Framework. И так далее.

Количеством библиотек во многом определяется развитость и популярность языков. Чем больше приверженцев, тем больше библиотек. А чем больше библиотек, тем больше приверженцев.

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

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

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

Чрезвычайно важно изучать библиотеки того языка, который вы выбрали, чтобы потом быстро ориентироваться в них: у развитых языков очень много библиотек. Навык обращения с библиотеками – один из обязательных для современного программиста. ALMAMAT. IT Faces

Ссылка на основную публикацию
Adblock
detector