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)
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.
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.