A bekapcsolástól a bash promptig: A GNU C könyvtár

Következő Előző Tartalom

## 5. A GNU C könyvtár

A következő dolog, ami a számítógép bekapcsolásakor történik, hogy betöltődik és lefut az init. Azonban az init - mint majdnem minden program - függvényeket használ más könyvtárakból.

Talán már láttál C nyelvű példaprogramot, mint ez is:

            main() {
                    printf("Hello World!\n");
            }

A programban nincs leírva mi az a "`printf`", honnan is jön ez? Ez a standard C könyvtárakból - egy GNU/Linux rendszeren a glibc - származik. Ha Visual C++ alatt fordítod le, akkor ugyanannak a standard függvénynek a Microsoftos változatából jön. Milliárdnyi van ezekből a standard függvényekből a matematikához, stringekhez, dátumhoz/időhöz, memóriafoglaláshoz és így tovább. A Unix (beleértve a Linuxot) alatt minden vagy C-ben van írva, vagy nagyon úgy kell tennie mintha abban lenne írva. Egyszóval minden program tudja használni ezeket a függvényeket.

Ha belenézel a `/lib` könyvtárba, sok olyan fájlt fogsz látni, amit `libvalami.so`-nak vagy `libvalami.a`-nak hívnak. Ezek a függvények könyvtárai. A glibc csak a GNU változata ezeknek a függvényeknek.

Két módon használhatják a programok ezeket a függvénykönyvtárakat. Ha statikusan kapcsolódnak egy programhoz, ezek a függvények belemásolódnak a végrehajtható fájlba, amikor létrejön. Ez az, amire a `libvalami.a` könyvtárak valók. Ha dinamikusan kapcsolódnak egy programhoz (ez az alapértelmezés), akkor amikor a program fut és szüksége van a függvény kódjára, meghívja azt a `libvalami.so` fájlokból.

Az "`ldd`" parancsra van szükséged, ha meg akarod tudni, melyik függvénykönyvtárat használja egy bizonyos program. Itt vannak például azok a függvénykönyvtárak, amiket a "`bash`" használ:

            [greg@Curry power2bash]$ ldd /bin/bash
                    libtermcap.so.2 => /lib/libtermcap.so.2 (0x40019000)
                    libc.so.6 => /lib/libc.so.6 (0x4001d000)
                    /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

## 5.1 Beállítás

Néhány a könyvtárakban lévő függvény attól függ, hogy helyileg hol vagy. Például mi itt Ausztráliában a dátumokat így írjuk: nn/hh/éé, de az amerikaiak hh/nn/éé -et írnak. Van egy program ami a "`glibc`" csomagban van, "`localedef`" a neve. Ez lehetővé teszi ezek beállítását.

## 5.2 Gyakorlatok

Használd az "`ldd`" parancsot, hogy megtudd, milyen programkönyvtárakat használnak a kedvenc alkalmazásaid.

Használd az "`ldd`"-t arra, hogy megtudd, milyen könyvtárakat használ az "`init`".

Készíts egy játék könyvtárat, egy vagy két függvénnyel. Az "`ar`" programmal lehet létrehozni őket. Az "`ar`" kézikönyv-oldalából megtudhatod ennek menetét. Írj, fordíts le és csatolj egy programot ami ezt a könyvtárat használja.

## 5.3 További információ

- forráskód, lásd a Building a Minimal Linux System from Source Code doksit URL-ért

Következő Előző Tartalom