Biblioteka (računarstvo)

S Vikipedije, slobodne enciklopedije
Ilustracija aplikacije koju koristi dadoteka Vorbisove biblioteke za pokretanje Ogg Vorbis datoteke

U računarstvu, biblioteka predstavlja kolekciju nepromenljivih resursa koju koriste programski jezici, npr. za razvoj softvera. Biblioteke mogu da sadrže podatke za podešavanje, dokumentaciju, pomoćne podatke, poruke u šablonima, stare kodove i potprograme, klase, vrednosti ili tipske specifikacije. U IBM-ovom 360/operativnom sistemu i njegovim mlađim verzijama, biblioteke su određene kao odvojene grupe podataka.

U računarstvu, biblioteka predstavlja skup izvršavanja različitih ponašanja, napisanih u okviru programskih jezika. Kada kažemo "ponašanje" mislimo na dobro definisan pristup uz pomoć kojeg se uvodi ponašanje. Ovo znači da dok god razvijeniji programi koriste biblioteku za pravljenje sistemskih poziva, nije potrebno ponovo pisati iste sistemske pozive više puta. Pored toga, ponašanje omogućava ponovnu upotrebu od strane više nezavisnih programa. Program uvodi bibliotekom osigurano ponašanje preko mehanizma datog programa. Na primer, u jednostavnom imperativnom programskom jeziku kao što je C, ponašanje u biblioteci se poziva korišćenjem C-ove funkcije pozivanja. Ono što razlikuje poziv u biblioteci od drugih funkcija istog programa, jeste način na koji je kod organizovan u sistemu.

Kod biblioteke je organizovan na takav način da se može koristiti od strane više različitih programa koji nemaju nikakve veze jedan sa drugim, dok je kod deo programa organizovan tako da se može koristiti samo od strane jednog programa. Ova razlika može dovesti do hijerarhijske notacije kada program brzo raste, kao što je slučaj sa programom koji jesačinjen od više miliona linija koda. U ovom slučaju, postoje biblioteke koje se ponovo koriste od strane manjih nezavisnih delova velikog programa. Izdvajajuća karakteristika je ta da je biblioteka orgranizovana za potrebe koje se mogu ponovo koristiti od strane nezavisnih programa ili potprograma. Korisnik jedino mora da zna pristup, ali ne i unutrašnje detalje biblioteke.

Cilj biblioteke je da omogući ponovno korišćenje ponašanja. Kada program pozove biblioteku, on pridobija ponašanje te biblioteke, tako da nema potrebe da program sam uvodi ponašanje. Biblioteke omogućavaju podelu koda u modularnoj formi i laku distribuciju koda.

Ponašanje koje je implementirano od strane biblioteke, može biti povezano sa pozivajućim programom na različitim fazama programa. Ako se kodu biblioteke pristupa tokom pravljenja pozivajućeg programa, onda se biblioteka naziva - statična biblioteka. Alternativa je da se napravi izvršavanje pozivajućeg programa i da se ono distribuira odvojeno od biblioteke. Ponašanje biblioteke je povezano nakon izvršavanja kao deo početnog procesa izvršavanja, ili na polovini izvršavanja. U ovom slučaju biblioteka se naziva - dinamična biblioteka. Dinamična biblioteka se može učitati i linkovati kao deo pripremanja programa za izvršavanje uz pomoć linkera. U drugom slučaju, na polovini izvršavanja, aplikacija može zatražiti učitavanje traženog modula.

Većina prevedenih programskih jezika ima standardnu biblioteku, iako programeri takođe mogu da kreiraju njihove sopstvene biblioteke. Većina modernih softverskih sistema pravi biblioteke koje dozvoljavaju većinu sistemskih usluga. Takve biblioteke imaju modifikovane usluge koje traže moderne aplikacije.  Većina kodova korišćenih od strane moderne aplikacije je napravljeno u takvim sistemima biblioteka.

Istorija[uredi | uredi izvor]

Najraniji koncepti programiranja koji imaju nekakve veze sa bibliotekama, nastojali su da odvoje definiciju podataka od sprovođenja programa. JOVIAL je učinio koncept komunikacionog "bazena" popularnim 1959. godine, iako je usvojio ideju iz većih sistemskih SEJDž (SAGE) softvera. Prateći principe odvojenih problema i sakrivanje informacija u računarstvu, "Svrha komunikacionog bazena je bila da omogući deljenje podataka među programima, uz pomoć centralizovanja opisa podataka".[1]

KOBOL je takođe sadržao "jednostavne mogućnosti za sistem biblioteke" u 1959. godine,[2] ali ih je Džim Samet označio "neadekvatnim karakteristikama biblioteke" u retrospektivi.[3]

Drugi veliki doprinos konceptu savremene biblioteke se ogleda u formi inovacije potprograma Fortrana. Fortranovi potprogrami mogu biti sastavaljeni tako da ne zavise jedan od drugog, ali kompajler nema linker. Saimim tim, pre uvođenja modula u Fortran, provera tipova između Fotranovih[NB 1] potprograma je bila nemoguća.[4]

Konačno, istorija treba da pamti uticajni Simula 67. Simula je bio prvi objektno orijentisani programski jezik, a njegove klase su bile približno slične modernom konceptu koji se koristio u Javi, C++, i C#. Klasni koncept Simule predstavlja noviju verziju paketa programskog jezika Ada i modula Module-2[5] Čak i kada je napravljen (1965. godine), Simula klase su se mogle uključivati u fajlove biblioteka i dodavati u vreme kompajliranja.[6]

Povezivanje[uredi | uredi izvor]

Biblioteke su veoma važne kod programskog povezivanja ili procesnog vezivanja, zato što one rešavaju reference poznate pod nazivom linkovi ili simboli. Proces povezivanja se obično izvršava automatski uz pomoć linkera ili vezivnog programa koji traži nekoliko biblioteka i različitih modula. Obično se ne smatra greškom ako se traženi link ne može naći u datom nizu biblioteka. Povezivanje se može smatrati gotovim kada se kreira datoteka izvršavanja, ili kada se program koristi u periodu izvršavanja.

Rešene reference se mogu koristiti za adresiranje nekih rutinskih poziva. One mogu biti u glavnom programu, ili u jednom delu  programa koji zavisi od drugog. One su rešene u izmenjenim ili premeštenim adresama (iz zajedničke baze), uz pomoć dodele vremenskog izvršavanja memorije za memorijske segmente svakog referenciranog modula.

Neki programski jezici mogu koristiti karakteristiku zvanu pametno povezivanje gde je linker povezan sa komapjlerom, tako da linker zna kako su spoljašnje reference korišćene, i da se kod u bibliotekama nikad ne koristi, čak iako je unutrašnje referenciran, on može biti isključen iz  aplikacije. Na primer, program koji koristi samo cele brojeve, može isključiti rutine biblioteke pretvaranja celobrojne vrednosti u decimalnu vrednost. Ova pametna karakteristika može dovesti do smanjivanja veličine datoteke i povećati prostor u memoriji.

Premeštanje[uredi | uredi izvor]

Neke reference u programu ili biblioteci su sačuvane u relativnoj ili simboličkoj formi, i one se ne mogu rešiti dok svi kodovi i biblioteke imaju statičku adresu. Premeštanje je proces prilagođavanja ovakvih referenci, i izvršava se uz pomoć linkera ili loadera. Generalno gledano, premeštanje se ne može uraditi pojedinačno u bibliotekama zato što adrese u memoriji variraju u zavisnosti od programa i ostalih biblioteka. Kodovi koji zavise od pozicije izbegavaju apsolutne adrese i zbog toga im ne treba premeštanje.

Statične biblioteke[uredi | uredi izvor]

Kada je povezivanje izvršeno tokom kreiranja nekog objektnog fajla, to povezivanje se naziva - statično povezivanje ili rano vezivanje. U takvom slučaju, povezivanje se obično izvršava uz pomoć linkera, ali se može izvršiti i uz pomoć kompilatora. Statička biblioteka, takođe poznata i kao arhiv, ima cilj da bude statički povezana. Prvobitno su postojale samo statičke biblioteke. Statičko povezivanje mora biti izvršeno kada se bilo koji od modula ponovo kompajlira.

Svi moduli koje program zahteva su ponekad statično povezani i kopirani u izvršnu datoteku. Ovaj proces, i dobijeni samostalni fajl, je poznat kao statična izrada programa. Statična izrada ne traži dalje premeštanje ako je korišćena virtualna memorija ili ako naprosto ne postoji potreba za modifikacijom adrese.

Zajedničke biblioteke[uredi | uredi izvor]

Zajedničke biblioteke ili zajednički objekti predstavljaju fajl koji treba da se deli uz pomoć izvršnog modula i sledećih zajedničkih objektnih fajlova. Moduli korišćeni od strane programa se češće učitavaju iz individualnog zajedničkog objekta u periodu izvršavanja ili periodu učitavanja, nego da se kopiraju uz pomoć linkera kada on kreira jedan monolitan izvršni fajl za program.

Zajedničke biblioteke mogu biti statično linkovane, što znači da su reference rešene i da se moduli nalaze u memoriji kada je izvršni fajl kreiran. Ali, često je spajanje zajedničkih biblioteka odloženo dok se učitavaju.

Većina modernih operativnih sistema[NB 2] može imate zajedničke fajlove biblioteke istih formata kao izvršni programi. Ovo omogućava dve glavne prednosti: prvo, zahteva pravljenje samo jednog loadera, umesto dva (imati jedan loader se smatra boljim izborom zbog svoje kompleksnosti). Drugo, dozvoljava da se izvršavanja upotrebljavaju kao zajedničke biblioteke, ako imaju tabelu simbola. Tipično kombinovano izvršavanje i formati zajedničke biblioteke su ELF (ELF) i Mač-O (Mach-O) (oba u Juniksu) i PE (u Windows-u).

U nekim starijim okruženjima kao što je 16-bitni Windows ili MPE za HP 3000, dozvoljeni su poređani podaci u kodu zajendičkih bibilioteka, ali mogu i druge značajne restrikcije da se nalaze u kodu zajedničkih biblioteka.

Zajednička memorija[uredi | uredi izvor]

Kod biblioteke može biti podeljen u memoriji uz pomoć višestrukih procesa. Ako je korišćena virtuelna memorija, procesi izvršavaju istu stranu RAM memorije, mapirane u različite adresorske prostore svakog procesa. Ovo je prednost. Na primer, u sistemu otvorenog koraka (OpenStep), aplikacije su obično veličine nekoliko stotina kilobajta i učitavaju se brzo; većina njihovih kodova je locirana u bibliotekama koje su već učitane zbog druih zahteva operativnog sistema .

Programi mogu postići RAM deljenje uz pomoć korišćenja pozicioniranja nezavisnih kodova (kao npr. u Juniksu), što dovodi do kompleksne ali fleksibilne arhitekture, ili uz pomoć korišćenja čestih virtuelnih adresa (kao npr. u Windows-u i OS/2). Ovi sistemi nas uveravaju da kod ima veliku mogućnost da bude podeljen, uz pomoć različitih trikova kao što je mapiranje prostora adrese ili rezervisanje slotova za svaku zajedničku biblioteku. Treća mogućnost je slabo skladištenje, korišćeno od strane IBM Sistema/38 i njegovih naslednika. Ona dozvoljava kodove koji zavise od pozicije ali ima značajne restrikcije tj. ograničava mesto plasiranja koda ili način njegovog deljenja.


U nekim različitim slučajevima verzije podeljenih biblioteka mogu izazvati probleme, posebno kada biblioteke različitih verzija imaju isti naziv datoteke, a različite instalirane aplikacije koje traže specifične verzije. Takav scenario je poznat kao DLL pakao, imenovanog nakon Windows i OS/2 DLL datoteke. Mnoštvo modernih operativnih sistema je obrisalo metode nakon 2001 godine, da bi eleminisale gore naveden problem ili korišćenje specifične "privatne" biblioteke.[7]

Dinamično povezivanje[uredi | uredi izvor]

Dinamično povezivanje ili kasno vezivanje predstavlja povezivanje dok se program učitava (vreme učitavanja) ili izvršava (vreme izvršavanja), ali postoje i situacije kada se povezivanje vrši nakon pravljenja izvršnog fajla. Dinamično povezana biblioteka (kod Windows operativnog sistema i OS/2 sistema; dinamično podeljeni objekti ili DSO kod sistema sličnim Juniksu) je biblioteka namenjena za dinamično povezivanje. Samo delić celokupnog posla odradi linker nakon kreiranja izvršnog fajla; on samo snima šta treba programu kao i inekdsima ili brojevima u bibliotekama. Glavni deo posla u procesu povezivanja je završen  kada se aplikacija učita (vreme učitavanja) ili tokom izvršavanja (vreme izvršavanja). Obično, neophodno povezivanje programa, koje se naziva "dinamički linker" ili "učitavajući linker", predstavlja deo osnovnog operativnog sistema. (Međutim, moguće je, a i nije teško, napisati program koji koristi dinamično povezivanje i koji sadrži svoj vlastiti dinamični linker, čak i za operativne sisteme koji ne podržavaju dinamično povezivanje.)

Programeri su prvobitno razvijali dinamično povezivanje u Multiks operativnom sistemu, započetim 1964. godine, i u MTS (Mičigen terminalski sitem), koji je napravljen u kasnim 1960-im godinama.[8]

Optimizacija[uredi | uredi izvor]

Iako se zajedničke biblioteke na većini sistema ne menjaju često, sistemi mogu da odrede svaku adresu za svaku zajedničku biblioteku u sistemu, i mogu da čuvaju informacije u biblitekama i izvršavajućim fajlovima. Ako je svaka zajednička bibloteka koja je pozvana prošla ovakav proces, onda će se svaka učitati na svojoj određenoj adresi, što ubrzava proces dinamičnog povezivanja. Optimizacija je još poznata i kao proces koji dolazi pre povezivanja u H operativnom sistemu ili kao proces koji dolazi pre povezivanja u Linuks operativnom sistemu. Mane ove tehnike se ogledaju u tome što obuhvata vreme potrebno za određivanje adresa svaki put kada se biblioteka promeni, nemogućnost korišćenja standardnog adresiranja, i nedostatak potrebnog prostora za korišćenje virtuelne adrese (problem koji će se ublažiti usvajanjem 64-bitne arhitekture, barem za sada)

Lociranje biblioteka u periodu izvršavanja[uredi | uredi izvor]

Loaderi kod zajedničkih biblioteka, variraju u zavisnosti od funkcionalnosti. Neki zavise od izvršavanja sačuvanih delova biblioteka. Svaka promena kao npr. imenovanje ili promena fajla će dovesti do pada sistema. Češće, samo je ime biblioteke (ne i putanja) sačuvano u periodu izvršavanja, uz pomoć operativnog sistema koji podržava metodu za nalaženje tražene biblioteke ili nekog algoritma. 

Ako izvršavanje zajedničke biblioteke zavisi od toga da li je obrisana, pomerena, preimenovana ili da li je različita verzvija biblioteke kopirana na mestu na kom je bila tokom pretrage, izvršavanje će pokazati grešku. Ovo se naziva zavisnost pakla i postoji na mnogim platformama. Windows varijanta je obično poznata kao DLL pakao. Ovaj problem se se ne može pojaviti ako se svaka verzija svake biblioteke podjednako identifikuje i ako svaki program referencira biblioteke po njihovim posebnim identifikatorima. Problem "DLL pakla" je nastao sa ranijim verzijama Windows-a, kao rezultat korišćenja imena biblioteka, koja nisu bila unikatna, za rešavanje dinamičnog povezivanja u programima. (Da bi se izbegao ovaj problem, kasnije verzije Windows-a su se oslanjale na mogućnost instaliranja privatnog DLL-a - što predstavlja delimično povlačenje iz upotrebe zajedničkih biblioteka - zajedno sa mehanizmom, da bi se sprečila zamena zajedničkih sistema DLL-a sa njihovim ranijim verzijama.)

Microsoft Windows[uredi | uredi izvor]

Windows proverava registar da bi utvrdio pravo mesto za učitavanje DLL-a koji implementira COM objekte, dok će ostali DLL objekti proveriti direktorijume. Prvo, Windows proverava direktorijum iz kog je program učitan (privatni DLL[7]); bilo kakve direktorijume pozivanjem SetDllDirectory() funkcije; Sistem 32, Sistem, i Windows direktorijumi; zatim trenutne direktorijume; a na kraju direktorijume specifirane od strane PATH okruženja promenljivih.[9] Aplikacije napisane za .NET Framework (od 2002. godine), takođe proveravaju globalno skladište kao primarno skladište podeljenih dll fajlova za brisanje problema DLL pakla.

Otvoreni korak[uredi | uredi izvor]

Otvoreni korak koristi fleksibilniji sistem, i nakon pokretanja sistema, sakuplja listu biblioteka iz poznatih lokacija (slično PATH konceptu). Pomeranje biblioteka ne predstavlja neki poseban problem, mada korisnici snose vremenski trošak pri prvom pokretanju sistema.

Sistemi slični Junkis sistemu[uredi | uredi izvor]

Većina sistema koji su slični Juniksu imaju opciju "pretrage" kojom se utvrđuju direktorijumi u kojima se nalaze dinamične biblioteke. Neki sistemi određuju standardnu putanju u konfiguracijskoj datoteci; dok je ostali kodiraju u dinamični loader. Neki formati izvršnih fajlova mogu dodati direktorijume uz pomoć kojih će tražiti biblioteke za partikularni program. Da bi se ovo zanemarilo, postoji prečica preko okruženja promenljive, iako je ona onemogućena za neke programe, tako da korisnik ne može pokrenuti taj program. Razvojnici (developeri) biblioteka su se ohrabrili da plasiraju svoje dinamične biblioteke na mestima u standardnoj pretrazi. Sa druge strane, ovo može činiti instalaciju novih biblioteka problematičnom, pa će "poznate" lokacije brzo postati skladište za rastući broj fajlova, čineći upravljanje još više kompleksnijim.

Dinamično učitavanje[uredi | uredi izvor]

Dinamično učitavanje tj. podniz dinamičkog povezivanja, omogućava učitavanje dinamično povezane biblioteke i očitavanje (ako je zatraženo) u periodu izvršavanja. Takav zahtev se može zatražiti u periodu sastavljanja ili eksplicitno u periodu izvršavanja. Implicitni zahtevi se izvršavaju u periodu sastavljanja kada linker dodaje reference biblioteke koje uključuju putanju fajlova ili jednostavna imena fajlova. Eksplicitni zahtevi se izvršavaju kada aplikacija uputi direktan poziv API operativnom sistemu u periodu izvršavanja.


Većina operativnih sistema koji podržavaju dinamično povezane biblioteke takođe podržavaju dinamično učitavanje biblioteka preko rantajm API linkera. Na primer, Microsoft Windows koristi API funkcije LoadLibrary, LoadLibraryEx, FreeLibrary i GetProcAdress preko Majkrosoftovih dinamično povezanih biblioteka; POSIX bazirani sistemi, uključujući Juniks i njemu slične sisteme koriste dlopen, dlclose i dlsym. Neki razvojni sistemi izvršavaju automatski ovaj proces.

Objekti i klase biblioteka[uredi | uredi izvor]

Iako je prvobitno osmišljeno u 1960im godinama, dinamično povezivanje nije došlo do sastava operativnih sistema, korišćenih od strane korisnika računara sve do kasnih 1980ih godina. U suštini, ono je bilo dostupno u određenoj formi u većini operativnih sistema u ranim 1990im godinama. Tokom istog perioda, objektno orijentisano programiranje (OOP) je postalo važan deo sveta programiranja. OOP u periodu pokretanja programa zahteva dodatne informacije koje tradicionalne biblioteke ne podržavaju. Pored imena i ulaznih tačaka lokalizovanog koda, potrebna je i lista objekata od kojih  zavisi. Ovo je sporedni efekat jedne od glavnih karakteristika OOP, a to je nasleđivanje, što znači da delovi kompletne definicije bilo koje metode mogu biti različito plasirani. Ovo je komplikovanije od jednostavnog listanja i podrazumeva jednu biblioteku koja traži usluge druge: U pravim OOP sistemima, biblioteke se možda ne prepoznaju u period sastavljanja, ali ta mogućnost varira od sistema do sistema.

U isto vreme, mnoštvo developera radi na ideji multi-povezivanja programa, u kojima bi "ekran" pokrenut na desktop računaru koristio usluge mejnfrejm ili mini računara za skladištenje ili procesuiranje podataka. Na primer, program na GUI-baziranim računarima bi poslao poruku na mini računar da bi dobio mali primer velikog prikaza baze podataka. Pozivi dalekih procedura već upravljaju ovim zadacima, ali ne postoji standardni RPC sistem.

Ubrzo je većina proizvođača mini računara i mejnfrejm računara podsticala projekte da kombinuju oba, dajući OOP format biblioteke koji se može koristiti svuda. Takvi sistemi su bili poznati kao objektne biblioteke, ili distribuirani objekti, ako podržavaju daljinski (udaljen) pristup (nemaju svi ovu mogućnost). Majkrosfotov KOM je primer sistema za lokalnu upotrebu, DKOM prestavlja modifikovanu verziju koja omogućava daljinski pristup.


Određeno vreme objekti biblioteka imaju status "sledeće velike stvari" u programskom svetu. Bilo je nekoliko napora da se naprave sistemi koji bi se mogli pokretati preko platformi, čak je bilo pokušaja velikih kompanija da se developeri ograniče na svoj sopstveni sistem. Primeri uključuju IBM-ov sistem objektnog modela, sanov mikrosistem distribuiranih objekta, sledeće prenosive distribuirane objekte, digitalne objekte, Majkrosoftovu komponentu objektnog modela, i bilo koji broj KOBRA-baziranih sistema.

Nakon neizbežnog hlađenja tržišta, objektne biblioteke su nastavljene da budu korišćene i u objektno orijentisanim programima i distribuiranim informacionim sistemima. Klase biblioteke OOP su ekvivalentne starijim tipovima kodova biblioteka. One sadrže klase, koje opisuju karakteristike i definišu akcije (medote) koje objetki sadrže. Klase biblioteka se koriste za kreiranje instanci, ili objekta preko njihovih karakterističnih nizova. U nekim OOP programskim jezicima, kao što je Java, razlika je jasna, klase se često nalaze u datotekama biblioteke (kao npr. Javin JAR (JAR) fajl format) dok objekti instance borave samo u memoriji (iako bi potencijalno mogle da se nalaze u odvojenim datotekama). U drugim programima, kao npr. Smalltalk, klase biblioteka se uglavnom koriste kao polazna tačka za sistemsku sliku koja obuhvata celokupno okruženje, klase i instance objekata.

Udaljene biblioteke[uredi | uredi izvor]

Druga solucija za biblioteke podrazumeva korišćenje potpuno odvojenih izvršavanja (obično u laganijoj formi) a oni se pozivaju koristeći udaljeni proceduralni poziv (RPC) preko interneta na drugi računar. Ovaj pristup potpuno povećava ponovnu upotrebu operativnog sitema: kod koji mora da podržava biblioteku je isti kod koji se koristi za pravljenje aplikacija i za osiguravanje svakog drugog programa. Pored toga, takvi sistemi ne zahtevaju da biblioteka postoji, ali mogu poslati neke druge zahteve preko interneta.

Međutim, takav pristup znači da svaki poziv biblioteke zahteva značajnu količinu takozvanog "overhead-a" tj. prelaženja preko. RPC pozivi su mnogo skuplji od poziva zajedničke biblioteke koja je već učitana na istoj mašini. Ovaj pristup se često koristi u  raspodeljenom izračunavanju koje teško koristi udaljene pozive, a posebno teško koristi sisteme na relaciji klijent-server i  aplikacione servere kao što je Java Enterprajs.

Biblioteke generacije koda[uredi | uredi izvor]

Biblioteke generacije koda predstavljaju API visokog nivoa koji generišu ili transformišu bajt kod za Javu. Koriste se često od strane aspektno orijentisanih programa, za pristup podacima, i za testiranje dinamičnih objekata. Koriste se takođe za prekidanje pristupa određenom delu.[10]

Imenovanje datoteke[uredi | uredi izvor]

  • Mnoštvo modernih sistema sličnim Juniksu imaju ovu opciju.
Sistem čuva libfoo.a i libfoo.so datoteke u direktorijumima na sledeći način /lib, /usr/lib ili /usr/local/lib. Imena datoteka uvek počinju sa lib, a završavaju se sa sufiksom .a (arhiva, statična biblioteka) ili .so (zajednički objekat (shared object), dinamično povezane biblioteke). Neki sistemi mogu da imaju više imena kod  dinamično povezanih biblioteka, gde većina imena označava simbolinko povezivanje; imena mogu da sadrže glavnu verziju biblioteke, ili celu verziju; na primer, na nekim sistemima libfoo.so.2 bi bilo ime fajla za sekundarnu reviziju pristupa dinamično povezane biblioteke libfoo. Fajlovi .la koji se ponekad nalaze u direktorijama biblioteke predstavljaju arhivne alatke biblioteke. Sistem ih ne koristi.
Sistem nasleđuje skup statičkih biblioteka iz BSD, i snima ih kao .a fajl, a koristi ga kao .so- stil dinamično povezanih biblioteka (sa .dylib sufikosm). Većina biblioteka u OS X, međutim, sadrži "okvir", koji se nalazi unutar specijalnih direktorijuma koji se nazivaju "korpe" koje menjaju podatke i meta podatke koji su potrebni bibliotekama. Na primer, okvir poznat kao MyFramework treba da se implementira u korpu  MyFramework.framework, zajedno sa MyFramework.framework/MyFramework  a može biti dinamično povezan fajl biblioteke ili oponašajući dinamično povezan fajl biblioteke u MyFramework.framework/Versions/Current/MyFramework.
Dinamično spojene biblioteke obično imaju sufiks *.DLL,[11] iako se i druga imena ekstenzija falova mogu odrediti kao dinamično linkovane barijere, kao npr. *.OCX kod objektno spojenih i ugrađenih (OSU) biblioteka. Revizija pristupa je takođe šivfrovana u imenima fajlova, ili abrstraktovana koristeći COM-objektni pristup . U zavisnosti od toga kako su kompajlirani, *.LIB fajlovi mogu predstavljati statične biblioteke ili dinamično povezane biblioteke koje se koriste samo tokom kompilacije (tj. "ubacivanja biblioteka"). Različito od UNIX sveta, koji koristi različitu ekstenziju fajla, kada se povezuje sa .LIB fajl na Windows-u prvo se mora znati da li je biblioteka regularno statična ili ubačena bibliteka. U daljem slučaju, .DLL fajl se mora izvršiti u periodu izvršavanja programa.

Vidi još[uredi | uredi izvor]

Napomene[uredi | uredi izvor]

  1. ^ It was possible earlier between, e.g., Ada subprograms.
  2. ^ Some older systems, e.g., Burroughs MCP, Multics, also have only a single format for executable files, regardless of whether they are shared.

Reference[uredi | uredi izvor]

  1. ^ Wexelblat 1981, str. 369
  2. ^ Wexelblat 1981, str. 274
  3. ^ Wexelblat 1981, str. 258
  4. ^ Wilson & Clark 1988, str. 126.
  5. ^ Wilson & Clark 1988, str. 52.
  6. ^ Wexelblat 1981, str. 716.
  7. ^ a b Anderson, Rick (2000-01-11).
  8. ^ "A History of MTS".
  9. ^ "Dynamic-Link Library Search Order".
  10. ^ "Code Generation Library". http://sourceforge.net/: Source Forge.
  11. ^ Bresnahan & Blum 2015.

Literatura[uredi | uredi izvor]

Spoljašnje veze[uredi | uredi izvor]