Ez a rész arról szól, hogy hogyan telepítsd a 2-es glibc-t elsődleges C könyvtárként. Ezek után minden program amit a rendszereden fordítasz az új C programkönytárat fogja használni, hacsak nem beszéled le erről speciális fordító kapcsolók segítségével.
Ha RedHat vagy Debian linux-ot használsz és letöltötted a megfelelő rpm vagy deb csomagokat, átugorhatod ezt a részt, nézd meg a RedHat vagy Debian telepítési útmutatót.
Ez a rész leírja, hogy hogyan fordítsd le a 2-es glibc-t és a kiegészítőit a forrásból. Akkor kell fordítanod a glibc-t, ha változtatni akarsz az alapbeállításain vagy az optimalizáláson, vagy olyan kiegészítőt akarsz használni, amihez nincsen bináris csomag.
Egy i586@133 gépen 64 MB RAM-mal, kb. 3 órába telik, amíg elkészül a teljes könyvtár a kiegészítőkkel. Egy erősen kihasznált i686@200-en ugyanez kb. fél órába kerül.
Ahhoz, hogy le tudd fordítani a forrást, ki kell csomagolnod azt az archívból. Erre a legjobb megoldás a következő:
tar xzf glibc-2.0.6.tar.gz
cd glibc-2.0.6
tar xzf ../glibc-linuxthreads-2.0.6.tar.gz
tar xzf ../glibc-crypt-2.0.6.tar.gz
tar xzf ../glibc-localedata-2.0.6.tar.gz
Ez a glibc-2.0.6 könyvtárba csomagolja ki a linuxthreads, crypt és locale kiegészítőket, ahol a configure megtalálja őket.
A glibc-2.0.6 könyvtárba hozzál létre egy compile nevű könyvtárat majd lépjél bele. Mindent ebben a könytárban fogsz csinálni, ez egyszerűsíti a takarítást. (A fejlesztők eddig nem törték magukat, hogy a 'make clean' tökéletesen működjön.)
mkdir compile
cd compile
Futtasd le a ../configure
szkriptet. Ha kiegészítő csomagokat is akarsz használni, meg kell adnod az --enable-add-ons kapcsolót, pl.: --enable-add-on\s=linuxthreads,crypt,localedata.
Valószínűleg meg akarod adni a célkönyvtárat is, ahova a glibc-t telepíteni akarod. Mivel a szabványos linux disztribúcióhoz akarsz igazodni, add meg a --prefix=/usr kapcsolót. (Ha egy linux rendszeren az /usr
könyvtárat adod meg, a configure magától be tud állítani egyéb fontos elérési útvonalakat, ahova a libc.so és egyéb más fontos a /lib
-ben lévő könyvtárakat kell tenni.
A configure parancssora valahogy így fog kinézni:
../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr
A fordításhoz és ellenőrzéshez írd be a következőket:
make
make check
Akár fordítod a glibc-t, akár bináris csomagokból rakod fel, néhány fájlt át kell mozgatnod, mert bár minden újonnan fordított program az új glibc-t fogja használni, a régi (nem statikusan linkelt) programoknak szükségük van a régi programkönyvtárra (libc5), ezért azt nem írhatod egyszerűen felül.
mkdir -p /usr/i486-linuxlibc5/lib
/usr/include
-ból:
mv /usr/include /usr/i486-linuxlibc5/include
mkdir /usr/include
ln -s /usr/src/linux/include/linux /usr/include/linux
ln -s /usr/src/linux/include/asm /usr/include/asm
ln -s /usr/X11R6/include/X11 /usr/include/X11
ln -s /usr/lib/g++-include /usr/include/g++
Ezek a kapcsok lehet, hogy kicsit eltérnek a megadottól, mert az include könyvtárak helye lehet disztribúciófüggő. Legalább is a Slackware linuxokon a g++ fejléc fájlok a /usr/local/g++-include
könyvtárban vannak, míg a Debian linuxokon a /usr/include/g++
könyvtárban találhatók és a
/usr/lib/g++-include
kapocs a /usr/include/g++
-re mutat.
Az utóbbi esetben valószínűleg szerencsésebb az eredeti g++ include könyvtárat visszamozgatni a /usr/include
-be.
/usr/include
könyvtárban volt. Egyes szabványtalan programkönyvtárak, mint pl. az ncurses fájlokat raknak be a /usr/include
könyvtárba, vagy kapcsokat hoznak ott létre, melyek az adott programkönyvtár include könyvtárára mutatnak. Ezeket a fájlokat és kapcsokat vissza kell állítanod, hogy továbbra is használni tudd a kérdéses programkönyvtárakat.
/usr/i486-linuxlibc5/lib
) az /etc/ld.so.conf
fájl elejére. Legalább az 1.8.8-as verziójú ld.so-ra van szükséged, különben bizarr hibaüzenetekkel találod magad szembe a glibc telepítése után.
mv /usr/lib/libbsd.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libc.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libgmon.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libm.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libmcheck.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libc.so /usr/i486-linuxlibc5/lib
mv /usr/lib/libm.so /usr/i486-linuxlibc5/lib
cp /lib/libm.so.5.* /usr/i486-linuxlibc5/lib
cp /lib/libc.so.5.* /usr/i486-linuxlibc5/lib
A libm.so.5
és libc.so.5
fájlokat másolni kell és nem mozgatni, ha a /usr
nem a /
partíción van, mert ezekre a programkönyvtárakra a linuxnak induláskor szüksége van, ezért a /
köteten kell legyenek.
/usr/lib/*.o
fájlokat az új könyvtárba.
mv /usr/lib/crt1.o /usr/i486-linuxlibc5/lib
mv /usr/lib/crti.o /usr/i486-linuxlibc5/lib
mv /usr/lib/crtn.o /usr/i486-linuxlibc5/lib
mv /usr/lib/gcrt1.o /usr/i486-linuxlibc5/lib
ldconfig -v
Ha előre fordított bináris csomagokból telepíted a glibc-t, először ellenőrizd, hogy mi van a csomagokban:
tar -tzvf glibc-2.0.bin.i386.tar.gz
tar -tzvf glibc-crypt-2.0.bin.i386.tar.gz
Ha elégedett vagy az eredménnyel, telepítheted a glibc-t:
cd /
tar -xzf glibc-2.0.bin.i386.tar.gz
tar -xzf glibc-crypt-2.0.bin.i386.tar.gz
ldconfig -v
Ha más architektúrát vagy verziót használsz, értelemszerűen helyettesítsd a fájlneveket.
A glibc legújabb verziója általában nincs meg bináris csomagban, viszon a legújabb verzió használata mindig javasolt, a hibajavítások miatt. Ha nem tudod a glibc-t lefordítani a saját gépeden, töltsél le egy bináris programkönyvtárat tartalmazó csomagot egy olyan disztribúcióból, ami a glibc-t használja (pl. RedHat) és telepítsd fel.
A programkönyvtár forráskódból való telepítéséhez, add ki root felhasználóként a compile/
könyvtárból a következő utasításokat:
make install
ldconfig -v
A telepítés végső lépcsőjeként (mind a bináris csomagok, mind a forráskódból való telepítés esetén) frissíteni kell a gcc specs
fájlját, hogy a fordító az új glibc-vel szerkessze össze a későbbiekben fordított programokat.
Hogy meghatározd, a gcc melyik specs fájl használja, add ki a következő parancsot:
% gcc -v
reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
gcc version 2.7.2.2
Ebben az esetben a i486-unknown-linux írja le a rendszert és a 2.7.2.2 a verziót.
Át kell másolnod a /usr/lib/gcc-lib/<system>
könyvtárat a régi rendszer könyvtárba:
cd /usr/lib/gcc-lib/
cp -r i486-unknown-linux i486-linuxlibc5
Lépjél be az eredeti könyvtáraba, majd a verziószám által jelölt könyvtárba:
cd /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2
Az ebben a könyvtárban található specs
fájlt kell módosítanod.
A fájlban írd át a /lib/ld-linux.so.1
-t /lib/ld-linux.so.2
-ra. Minden hivatkozást a %{...:-lgmon}
kifekezésre törölnöd kell a fájlból, mert a glibc nem a gmon-t használja.
Később e dokumentumban találsz egy
Példa specs fájl című részt.
A programkönyvtár ellenőrzése végett, hozzál létre a glibc.c nevű fájlt a következőkkel:
#include <stdio.h>
main()
{
printf("hello world!\n");
}
Fordítsd le a programot.
% gcc glibc.c -o glibc
Az ldd programmal ellenőrizd, hogy a fordító tényleg az új programkönyvtárat használja:
% ldd glibc
libc.so.6 => /lib/libc.so.6 (0x4000e000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Ha a programot sikerül lefordítani, és futása eredményeként kiírja, hogy "hello world!" a telepítés sikerült.