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ó


Következő Előző Tartalom