Kirjasto (tietotekniikka)

Tietotekniikassa kirjastot (mm. ohjelmakirjasto, luokkakirjasto) ovat kokoelmia, aliohjelmia, luokkia ja/tai ohjelmia, joita käytetään tietokoneohjelmien modulaarisessa kehittämisessä sekä ohjelmien suorittamisen aikana. Kirjastoissa olevia (ali)ohjelmia ei yleensä suoriteta itsenäisesti, vaan niissä olevia palveluita käytetään itsenäisesti suoritettavien ohjelmien apuna.

Erityyppisiä kirjastoja ovat:
 jaettu kirjasto
 staattinen kirjasto

Kirjastot pääasiassa jakautuvat kahteen tyyppiin: osana ohjelmaa kiinteästi oleva staattinen kirjasto ja dynaamisesti linkitettävä jaettu kirjasto. Staattinen kirjasto on käännöksen yhteydessä linkitettävä ohjelmamoduuli. Jaettujen kirjastojen tyyppi riippuu tyypillisesti käyttöjärjestelmästä, mutta myös kielen suoritusympäristön (virtuaaliympäristön) ratkaisuista.

Kirjastoihin sijoitettavia ohjelmatoimintoja voi olla yhtä paljon kuin sovellusratkaisujakin: lähes mikä vain ohjelmointiteknisesti mahdollinen toiminto on mahdollista sijoittaa ohjelmakirjastoon.

Kirjastoissa olevia symboleita käytetään päättelemään mitkä muuttujat tai ohjelmakoodi on jaettua. Symbolit voivat olla suojattuja käytöltä.

Jaettu kirjasto 
Jaettu kirjasto tai ajonaikainen kirjasto on tietotekniikassa useiden käyttöjärjestelmien tapa jakaa ohjelmakoodia useiden ohjelmien kesken.

 Microsoft Windows käyttää Dynamic-link library -kirjastoja (DLL).
 Useat Unix-tyyppiset käyttöjärjestelmät kuten Linux käyttävät Shared Object -kirjastoja (SO).

Jaettujen kirjastojen etuna on keskusmuistin ja levytilan säästö. Levytilaa säästyy koska samaa ohjelmakoodia ei tarvitse linkittää jokaiseen ohjelmaan erikseen, vaan ne ladataan ajonaikana yhteisestä kirjastosta. Keskusmuistia säästyy jos käyttöjärjestelmä osaa jakaa kirjaston myös keskusmuistissa. Tällöin kahden tai useamman ohjelman käyttäessä samaa kirjastoa, ladataan siitä jaettuun muistiin vain yksi kopio ja kaikki käyttävät samaa jaettua muistialuetta.

Jaettujen kirjastojen kanssa voi käyttää kahta tapaa:
 dynaaminen linkitys: käyttöjärjestelmä lataa kirjaston ohjelman käynnistyessä (jos se ei ole jo muistissa)
 dynaaminen lataus: ohjelma lataa tietyn kirjaston (jos se ei ole jo ladattu) ja kutsuu valikoivasti sen toimintoja

Linuxissa on mahdollista:
 päivittää uuteen kirjastoon ja säilyttää vanha versio yhteensopivuuden vuoksi.
 ohittaa tietyt kirjastot tai jopa tietyt funktiot kirjastossa kun tiettyä ohjelmaa suoritetaan.
 nämä ovat mahdollisia samaan aikaan kun toiset ohjelmat käyttävät olemassa olevia.

Ongelmat 
Jaetun kirjaston menetelmällä on haittavaikutuksia liittyen saman kirjaston eri versioiden hallintaan. Eri käyttöjärjestelmät käyttävät eri strategioita kirjastojen hallintaan. Mikäli kirjaston rajapinta muuttuu on säilöttävä sekä edeltävä että seuraava versio jotta eri ohjelmaversiot voivat jatkossakin käyttää samaa kirjastoa.

Windowsin DLL-kirjastojen toteutustavan johdosta siihen liitetään usein termi DLL-helvetti (). Eräs syy ongelmaan on kirjastojen epämääräinen versiointi.
Ongelmaan esitetty ratkaisuja, mutta ne eivät ole aukottomasti välttäneet ongelmia. Ratkaisutavat muun muassa ovat lisänneet levytilan tarvetta, joka oli yksi syy jaettujen kirjastojen käytölle.
Ratkaisuna esitetään DLL-kirjastojen sijaan staattisten kirjastojen käyttöä.

Staattinen kirjasto 
Staattinen kirjasto on yksinkertaisesti joukko objektitiedostoja. Staattisilla kirjastoilla ei ole jaettujen kirjastojen etuja.
Kääntäjän tuottamat objektitiedostot liitetään yhteen tarkoitukseen sopivalla komennolla kuten ar.

Staattista kirjastoa tarvitaan vain ohjelman käännöksen aikana sen linkitysvaiheessa (ks. linkkeriohjelma): tämän jälkeen kirjaston sisältämä koodi on ohjelman sisällä. Staattisella linkityksellä jokaisella ohjelmalla on oma kopionsa kirjastosta.

Katso myös 
 Standardikirjasto
 Englanninkielisen Wikipedian artikkeli dynaamisesta lataamisesta 
Englanninkielisen Wikipedian artikkeli Windows- ja OS/2-alustojen DLL-kirjastoista 
 Englanninkielisen Wikipedian artikkeli DLL-kirjastojen ongelmista

Lähteet 

Ohjelmointi