десно|мини|277x277px|Илустрација апликације коју користи дадотека Ворбисове библиотеке за покретање Огг Ворбис датотеке
У рачунарству, библиотека представља колекцију непроменљивих ресурса коју користе програмски језици, нпр. за развој софтвера. Библиотеке могу да садрже податке за подешавање, документацију, помоћне податке, поруке у шаблонима, старе кодове и потпрограме, класе, вредности или типске спецификације. У IBM-овом 360/оперативном систему и његовим млађим верзијама, библиотеке су одређене као одвојене групе података.
У рачунарству, библиотека представља скуп извршавања различитих понашања, написаних у оквиру програмских језика. Када кажемо "понашање" мислимо на добро дефинисан приступ уз помоћ којег се уводи понашање. Ово значи да док год развијенији програми користе библиотеку за прављење системских позива, није потребно поново писати исте системске позиве више пута. Поред тога, понашање омогућава поновну употребу од стране више независних програма. Програм уводи библиотеком осигурано понашање преко механизма датог програма. На пример, у једноставном императивном програмском језику као што је C, понашање у библиотеци се позива коришћењем C-ове функције позивања. Оно што разликује позив у библиотеци од других функција истог програма, јесте начин на који је код организован у систему.
Код библиотеке је организован на такав начин да се може користити од стране више различитих програма који немају никакве везе један са другим, док је код део програма организован тако да се може користити само од стране једног програма. Ова разлика може довести до хијерархијске нотације када програм брзо расте, као што је случај са програмом који јесачињен од више милиона линија кода. У овом случају, постоје библиотеке које се поново користе од стране мањих независних делова великог програма. Издвајајућа карактеристика је та да је библиотека оргранизована за потребе које се могу поново користити од стране независних програма или потпрограма. Корисник једино мора да зна приступ, али не и унутрашње детаље библиотеке.
Циљ библиотеке је да омогући поновно коришћење понашања. Када програм позове библиотеку, он придобија понашање те библиотеке, тако да нема потребе да програм сам уводи понашање. Библиотеке омогућавају поделу кода у модуларној форми и лаку дистрибуцију кода.
Понашање које је имплементирано од стране библиотеке, може бити повезано са позивајућим програмом на различитим фазама програма. Ако се коду библиотеке приступа током прављења позивајућег програма, онда се библиотека назива - статична библиотека. Алтернатива је да се направи извршавање позивајућег програма и да се оно дистрибуира одвојено од библиотеке. Понашање библиотеке је повезано након извршавања као део почетног процеса извршавања, или на половини извршавања. У овом случају библиотека се назива - динамична библиотека. Динамична библиотека се може учитати и линковати као део припремања програма за извршавање уз помоћ линкера. У другом случају, на половини извршавања, апликација може затражити учитавање траженог модула.
Већина преведених програмских језика има стандардну библиотеку, иако програмери такође могу да креирају њихове сопствене библиотеке. Већина модерних софтверских система прави библиотеке које дозвољавају већину системских услуга. Такве библиотеке имају модификоване услуге које траже модерне апликације. Већина кодова коришћених од стране модерне апликације је направљено у таквим системима библиотека.
Историја Најранији концепти програмирања који имају некакве везе са библиотекама, настојали су да одвоје дефиницију података од спровођења програма. ЈОВИАЛ је учинио концепт комуникационог "базена" популарним 1959. године, иако је усвојио идеју из већих системских СЕЈЏ (САГЕ) софтвера. Пратећи принципе одвојених проблема и сакривање информација у рачунарству, "Сврха комуникационог базена је била да омогући дељење података међу програмима, уз помоћ централизовања описа података".
КОБОЛ је такође садржао "једноставне могућности за систем библиотеке" у 1959. године, али их је Џим Самет означио "неадекватним карактеристикама библиотеке" у ретроспективи.
Други велики допринос концепту савремене библиотеке се огледа у форми иновације потпрограма Фортрана. Фортранови потпрограми могу бити саставаљени тако да не зависе један од другог, али компајлер нема линкер. Саимим тим, пре увођења модула у Фортран, провера типова између ФотрановихIt was possible earlier between, e.g., Ada subprograms. потпрограма је била немогућа.
Коначно, историја треба да памти утицајни Симула 67. Симула је био први објектно оријентисани програмски језик, а његове класе су биле приближно сличне модерном концепту који се користио у Јави, C++, и C#. Класни концепт Симуле представља новију верзију пакета програмског језика Ада и модула Модуле-2 Чак и када је направљен (1965. године), Симула класе су се могле укључивати у фајлове библиотека и додавати у време компајлирања.
Повезивање Библиотеке су веома важне код програмског повезивања или процесног везивања, зато што оне решавају референце познате под називом линкови или симболи. Процес повезивања се обично извршава аутоматски уз помоћ линкера или везивног програма који тражи неколико библиотека и различитих модула. Обично се не сматра грешком ако се тражени линк не може наћи у датом низу библиотека. Повезивање се може сматрати готовим када се креира датотека извршавања, или када се програм користи у периоду извршавања.
Решене референце се могу користити за адресирање неких рутинских позива. Оне могу бити у главном програму, или у једном делу програма који зависи од другог. Оне су решене у измењеним или премештеним адресама (из заједничке базе), уз помоћ доделе временског извршавања меморије за меморијске сегменте сваког референцираног модула.
Неки програмски језици могу користити карактеристику звану паметно повезивање где је линкер повезан са комапјлером, тако да линкер зна како су спољашње референце коришћене, и да се код у библиотекама никад не користи, чак иако је унутрашње референциран, он може бити искључен из апликације. На пример, програм који користи само целе бројеве, може искључити рутине библиотеке претварања целобројне вредности у децималну вредност. Ова паметна карактеристика може довести до смањивања величине датотеке и повећати простор у меморији.
Премештање Неке референце у програму или библиотеци су сачуване у релативној или симболичкој форми, и оне се не могу решити док сви кодови и библиотеке имају статичку адресу. Премештање је процес прилагођавања оваквих референци, и извршава се уз помоћ линкера или лоадера. Генерално гледано, премештање се не може урадити појединачно у библиотекама зато што адресе у меморији варирају у зависности од програма и осталих библиотека. Кодови који зависе од позиције избегавају апсолутне адресе и због тога им не треба премештање.
Статичне библиотеке Када је повезивање извршено током креирања неког објектног фајла, то повезивање се назива - статично повезивање или рано везивање. У таквом случају, повезивање се обично извршава уз помоћ линкера, али се може извршити и уз помоћ компилатора. Статичка библиотека, такође позната и као архив, има циљ да буде статички повезана. Првобитно су постојале само статичке библиотеке. Статичко повезивање мора бити извршено када се било који од модула поново компајлира.
Сви модули које програм захтева су понекад статично повезани и копирани у извршну датотеку. Овај процес, и добијени самостални фајл, је познат као статична израда програма. Статична израда не тражи даље премештање ако је коришћена виртуална меморија или ако напросто не постоји потреба за модификацијом адресе.
Заједничке библиотеке Заједничке библиотеке или заједнички објекти представљају фајл који треба да се дели уз помоћ извршног модула и следећих заједничких објектних фајлова. Модули коришћени од стране програма се чешће учитавају из индивидуалног заједничког објекта у периоду извршавања или периоду учитавања, него да се копирају уз помоћ линкера када он креира један монолитан извршни фајл за програм.
Заједничке библиотеке могу бити статично линковане, што значи да су референце решене и да се модули налазе у меморији када је извршни фајл креиран. Али, често је спајање заједничких библиотека одложено док се учитавају.
Већина модерних оперативних системаSome older systems, e.g., Burroughs MCP, Multics, also have only a single format for executable files, regardless of whether they are shared. може имате заједничке фајлове библиотеке истих формата као извршни програми. Ово омогућава две главне предности: прво, захтева прављење само једног лоадера, уместо два (имати један лоадер се сматра бољим избором због своје комплексности). Друго, дозвољава да се извршавања употребљавају као заједничке библиотеке, ако имају табелу симбола. Типично комбиновано извршавање и формати заједничке библиотеке су ЕЛФ (ELF) и Мач-О (Маch-O) (оба у Јуниксу) и ПЕ (у Windows-у).
У неким старијим окружењима као што је 16-битни Windows или МПЕ за ХП 3000, дозвољени су поређани подаци у коду зајендичких бибилиотека, али могу и друге значајне рестрикције да се налазе у коду заједничких библиотека.
Заједничка меморија Код библиотеке може бити подељен у меморији уз помоћ вишеструких процеса. Ако је коришћена виртуелна меморија, процеси извршавају исту страну РАМ меморије, мапиране у различите адресорске просторе сваког процеса. Ово је предност. На пример, у систему отвореног корака (ОpenStep), апликације су обично величине неколико стотина килобајта и учитавају се брзо; већина њихових кодова је лоцирана у библиотекама које су већ учитане због друих захтева оперативног система .
Програми могу постићи РАМ дељење уз помоћ коришћења позиционирања независних кодова (као нпр. у Јуниксу), што доводи до комплексне али флексибилне архитектуре, или уз помоћ коришћења честих виртуелних адреса (као нпр. у Windows-у и ОС/2). Ови системи нас уверавају да код има велику могућност да буде подељен, уз помоћ различитих трикова као што је мапирање простора адресе или резервисање слотова за сваку заједничку библиотеку. Трећа могућност је слабо складиштење, коришћено од стране IBM Система/38 и његових наследника. Она дозвољава кодове који зависе од позиције али има значајне рестрикције тј. ограничава место пласирања кода или начин његовог дељења.
У неким различитим случајевима верзије подељених библиотека могу изазвати проблеме, посебно када библиотеке различитих верзија имају исти назив датотеке, а различите инсталиране апликације које траже специфичне верзије. Такав сценарио је познат као ДЛЛ пакао, именованог након Windows и ОС/2 ДЛЛ датотеке. Мноштво модерних оперативних система је обрисало методе након 2001 године, да би елеминисале горе наведен проблем или коришћење специфичне "приватне" библиотеке.
Динамично повезивање Динамично повезивање или касно везивање представља повезивање док се програм учитава (време учитавања) или извршава (време извршавања), али постоје и ситуације када се повезивање врши након прављења извршног фајла. Динамично повезана библиотека (код Windows оперативног система и ОС/2 система; динамично подељени објекти или ДСО код система сличним Јуниксу) је библиотека намењена за динамично повезивање. Само делић целокупног посла одради линкер након креирања извршног фајла; он само снима шта треба програму као и инекдсима или бројевима у библиотекама. Главни део посла у процесу повезивања је завршен када се апликација учита (време учитавања) или током извршавања (време извршавања). Обично, неопходно повезивање програма, које се назива "динамички линкер" или "учитавајући линкер", представља део основног оперативног система. (Међутим, могуће је, а и није тешко, написати програм који користи динамично повезивање и који садржи свој властити динамични линкер, чак и за оперативне системе који не подржавају динамично повезивање.)
Програмери су првобитно развијали динамично повезивање у Мултикс оперативном систему, започетим 1964. године, и у МТС (Мичиген терминалски ситем), који је направљен у касним 1960-им годинама."A History of MTS".