ejg3@cornell.edu
A Glibc 2 a GNU C programk�nyvt�r leg�jabb v�ltozata. Jelenleg m�dos�t�s n�lk�l fut GNU Hurd rendszereken �s a Linux i386, mk68k �s alpha rendszereken. A 2.1-es verzi� t�mogatni fogja a Linux PowerPc-t valamint a MIPS, Sparc, Sparc-64 �s Arm platformokat. A k�nyvt�r a j�v�ben m�s architekt�r�kat �s oper�ci�s rendszereket is t�mogatni fog.
A Linux rendszereken a glibc 2, a 6-os verzi�sz�m� libc-vel egyezik meg, amely a libc 5 ut�dja. A Linuxos libc fejleszt�i a libc 6-al fel akarjak v�ltani a libc 5-�t. A 2.0.6-os verzi�t�l kezdve, a libc megb�zhat�nak tekinthet�. A 2.1-es v�ltozat, amely hamarosan napvil�got l�t, k�szen �ll majd a sz�lesk�r� felhaszn�l�sra, �s tov�bbi platformokat is fog t�mogatni.
H�rom opcion�lis kieg�sz�t� l�tezik a glibc 2-h�z:
Az UFC-crypt csomag. Ezt a csomagot nem integr�lt�k a glibc-be, az exporttilalmak miatt.
A Posix 1003.1c "pthread" interf�sz egy implemet�ci�ja.
Ez tartalmazza a locale adatf�jlok el��ll�t�s�hoz sz�ks�ges adatokat, ezekre akkor van sz�ks�g, ha haszn�lni akarod a glibc nemzetk�zi lehet�s�geit.
A crypt �s LinuxThreads kieg�sz�t� csomagok er�sen aj�nlottak... Ha nem haszn�lod �ket, inkompatibilit�si probl�m�k l�phetnek fel m�s rendszerek k�l�nb�z� k�nyvt�raival. (Ha ezek ut�n m�gsem akarod haszn�lni �ket, meg kell adjad a --disable-sanity-checks opci�t a configure szkript futtat�s�n�l.)
Ez a HOGYAN arr�l sz�l, hogyan telep�tsd a glibc 2 k�nyvt�rat egy megl�v� Linux rendszerre. A le�r�s abb�l indul ki, hogy libc 5-ot haszn�lsz i386-os architekt�r�n, de m�s rendszerek �s k�nyvt�rak (pl. glibc1) felhaszn�l�i is haszn�t vehetik, csak le kell cser�lj�k a megfelel� f�jl- �s architekt�ra-neveket a szitu�ci�nak megfelel�en.
Eme HOGYAN legfrissebb v�ltozat�t megtal�lod a Linux Documentation Project r�szek�nt vagy a k�vetkez� kiszolg�l�n: http://www.imaxx.net/~thrytis/glibc/Glibc2-HOWTO.html.
K�l�nbs�gek a dokumentum 1.6-os �s 1.5-os v�ltozatai k�z�tt:
K�l�nbs�gek a dokumentum 1.5-os �s 1.4-es v�ltozatai k�z�tt:
A glibc-t t�bbf�lek�ppen telep�theted. Feltelep�theted tesztel�s c�lj�ra, ebben az esetben a r�gi k�nyvt�rakat haszn�lod tov�bbra is alap�rtelmez�sben, de ha ford�tasz egy programot, megadhatod, hogy az haszn�lja a teszt k�nyvt�rat. Ha ezt a telep�t�si m�dszert v�lasztod, k�s�bb k�nnyen elt�vol�thatod a glibc-t a g�pedr�l (persze a hozz� kapcsol�d� programok nem fognak m�k�dni). Ha ilyen m�don tesztelni akarod a glibc-t, forr�sb�l kell ford�tsad, mert nem k�sz�lt tesztel�si c�lb�l bin�ris csomag (pl. rpm). Err�l a megold�sr�l a Telep�t�s teszt k�nyvt�rk�nt fejezetben olvashatsz.
Ezzel ellent�tben, telep�theted a glibc-t els�dleges programk�nyvt�rk�nt is. Ilyenkor minden �j program, amit a g�pen ford�tasz, alap�rtelmez�sben a glibc-t fogja haszn�lni, kiv�tel persze, ha ford�t�skor a r�gi k�nyvt�rat adod meg. Ford�thatod a k�nyvt�rat magad, vagy feltelep�theted bin�ris csomagb�l is. Ha v�ltoztatni akarsz a glibc be�ll�t�sain, az optimaliz�l�ssal akarsz vari�lni, vagy olyan kieg�sz�t�t akarsz haszn�lni, ami a bin�ris csomagban nincsen benne, le kell t�ltened a forr�sk�dot, �s le kell ford�tanod a k�nyvt�rat. Ez esetben a telep�t�si �tmutat�t megtal�lod a Telep�t�s els�dleges C k�nyvt�rk�nt fejezetben.
Frodo Looijaard le�r egy harmadik telep�t�si m�dszert. Az � m�dszer�nek l�nyege, hogy a glibc-t m�sodlagos k�nyvt�rk�nt telep�ted, �s be�ll�tasz egy keresztford�t�t (cross compiler), ami a glibc-t haszn�lja. Ez a telep�t�si m�dszer kicsit bonyolultabb, mint a tesztk�nyvt�rk�nt telep�t�s, de ut�na egyszer�bb olyan programokat ford�tani, amik a glibc-t haszn�lj�k. Ennek a m�dszernek a le�r�s�t a A glibc-2 telep�t�se Linuxra c�m� dokumentumba tal�lod.
Ha 1.3-as Debiant haszn�lsz, �s nem akarod a glibc miatt az "unstable" v�ltozatot haszn�lni, olvasd el a Debian libc5 to libc6 Mini-HOWTO-t, ez le�rja, hogyan friss�tsd Debian csomagokkal rendszeredet.
Ha a glibc 2-t egy fontos g�pre telep�ted, val�sz�n�leg a teszt telep�t�s a jobb v�laszt�s. M�g ha a glibc-ben nincsenek is hib�k, egyes programokat esetleg m�dos�tani kell, hogy le tudd ford�tani �ket, mert v�ltozhatnak a k�nyvt�rban a f�ggv�nyek protot�pusai �s t�pusai.
A glibc 2 n�gy csomagb�l �ll: a glibc csomagb�l �s a h�rom kieg�sz�t� csomagb�l, ezek: LinuxThreads, Locale �s Crypt. A forr�sokat let�ltheted a k�vetkez� helyekr�l:
A teljes glibc ford�t�s�hoz �s telep�t�s�hez kb. 150 MB lemezter�letre lesz sz�ks�ged. Ha bin�ris csomagb�l telep�ted az alap glibc-t, akkor kb. 50MB-al kell sz�molnod.
A 2.0.6-os v�ltozatb�l nincsenek bin�ris csomgok. A 2.0.4-es verzi� bin�ris csomagjai i386-os �s m68k architekt�r�kra, valamint a 2.0.1-es v�ltozat alph�ra megtal�lhat� itt:
Ha Red Hat �ssze�ll�t�st haszn�lsz, let�ltheted a 2-es glibc-t rpm csomagokban a Red Hat ftp kiszolg�l�j�r�l: ftp://ftp.redhat.com/pub/redhat/. A Red Hat a glibc 2 k�nyvt�rat haszn�lja els�dleges C k�nyvt�rk�nt az �ssze�ll�t�s 5.0-as verzi�ja �ta.
Ha Debiant haszn�lsz, let�ltheted a 2-es glibc-t deb csomagokban a Debiant�l ftp://ftp.debian.org/debian/dists/unstable/main/. A f�jlokat libc6-nak h�vj�k. A glibc 2 r�sze a Debian hamm verzi�j�nak, els�dleges C k�nyvt�r lesz a Debian 2.0 megjelen�s�t�l.
Ez a r�sz azt �rja le, a glibc 2 telep�t�s�t teszt k�nyvt�rk�nt. Ha b�rmilyen programot ford�tasz, azt a ford�t� a r�gi glibc-vel szerkeszti �ssze, hacsak nem adod meg k�l�n, hogy a teszt k�nyvt�rat szeretn�d haszn�lni. Ford�t�skor az el�r�si �tvonalak beleker�lnek n�h�ny f�jlba, ez�rt val�sz�n�leg forr�sb�l kell telep�tsd a k�nyvt�rat.
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 leterhelt i686@200 g�pen ugyanez kb. f�l �r�ba ker�l.
Ahhoz, hogy le tudd ford�tani a forr�st, ki kell csomagolnod. Ezt legk�nnyebben a k�vetkez� m�don teheted meg:
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 bele. Mindent ebben a k�nyvt�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 a --enable-add-ons kapcsol�t, pl.: --enable-add-ons=linuxthreads,crypt,localedata.
Ki kell v�laszd a c�lk�nyvt�rat, ahova a k�nyvt�rat telep�teni fogod.
Erre a /usr/i486-linuxglibc2 egy j� v�laszt�s. Ehhez a configure param�terei a k�vetkez�k:
../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr/i486-linuxglibc2
A ford�t�shoz �s ellen�rz�shez �rd be a k�vetkez�ket:
make
make check
Ha a 'make check' sikeresen lefutott, telep�tsd a k�nyvt�rat root felhaszn�l�k�nt (m�g mindig a compile
k�nyvt�rb�l):
make install
ld.so
-r�l a /lib/ld-linux.so.2
-ra mutat:
ln -s /usr/i486-linuxglibc2/lib/ld-linux.so.2 /lib/ld-linux.so.2
Ez az egyetlen k�nyvt�r, amelynek r�gz�tett a helye, miut�n egy programhoz hozz� lett kapcsolva.
Ha a /lib
k�nyvt�rban l�trehozol egy kapcsot (link) hozz�, akkor k�s�bb k�nnyebb lesz
�tt�rni a glibc-re, mint els�dleges C k�nyvt�rra, amikor megjelenik a stabil verzi�ja./etc/ld.so.conf
f�jlt. A f�jl v�g�re be kell �rnod a lib k�nyvt�r el�r�si �tvonal�t, amiben az �j programk�nyvt�rak vannak. Valahogy �gy fog kin�zni: <prefix>/lib
, teh�t pl. /usr/i486-linuxglibc2/lib
a fenti esetben.
A /etc/ld.so.conf
f�jl elment�se ut�n futtasd le a k�vetkez� parancsot:
ldconfig -v
A telep�t�s utols� l�p�se a /usr/lib/gcc-lib
friss�t�s�b�l �ll. Ez az�rt sz�ks�ges, hogy a gcc tudja haszn�lni az �j programk�nyvt�rakat.
Els� k�rben duplik�lni kell a gcc-t. Hogy megtudd melyik az �ppen m�k�d� ggc konfigur�ci�, haszn�ld a gcc -v kapcsol�j�t:
% 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 az i486-unknown-linux a rendszer t�pusa, �s a 2.7.2.2 a gcc verzi�sz�ma.
�t kell m�solnod a /usr/lib/gcc-lib/<system>
k�nyvt�rat az �j tesztrendszer k�nyvt�r�ba:
cd /usr/lib/gcc-lib/
cp -r i486-unknown-linux i486-linuxglibc2
L�pj be az �j tesztrendszer k�nyvt�r�ba, majd a verzi�sz�mmal jel�lt k�nyvt�rba,
cd /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2
ezek ut�n m�dos�tsd a specs
f�jlt, ami ebben a k�nyvt�rban tal�lhat�.
�rd �t a /lib/ld-linux.so.1
sz�veget /lib/ld-linux.so.2
-re. Ha ez megvan, t�r�lj ki minden %{...:-lgmon}
f�jlra mutat� hivatkoz�st, mert a glibc nem haszn�lja a gmon k�nyvt�rat.
Tal�lsz egy p�lda spec f�jlt a
P�lda specs f�jl fejezetben.
Kapcsokat (link) kell l�trehoznod az �j include k�nyvt�rban, amik egy�b include k�nyvt�rakra mutatnak:
cd /usr/i486-linuxglibc2/include
ln -s /usr/src/linux/include/linux
ln -s /usr/src/linux/include/asm
ln -s /usr/X11R6/include/X11
El�fordulhat, hogy vannak m�s programk�nyvt�raid, mint pl. az ncurses, ezeknek a fejl�cf�jlait is ebbe a k�nyvt�rba kell helyezned. Ezeket a f�jlokat �t kell m�solnod vagy kapcsoznod (link) a /usr/include
k�nyvt�rb�l. (Lehetnek olyan programk�nyvt�rak is, amiket �jra kell ford�tanod, hogy a glibc2-vel m�k�dni tudjanak. Ebben az esetben egyszer�en ford�tsd le �ket, �s a telep�t�sn�l add meg a /usr/i486-linuxglibc2
k�nyvt�rat.)
A programk�nyvt�r tesztel�s�hez, hozz l�tre egy glibc.c f�jlba k�vetkez�kkel:
#include <stdio.h>
main()
{
printf("hello world!\n");
}
Ford�tsd le a k�vetkez� opci�kkal: "-b <base install directory> -nostdinc -I<install directory>/include -I/usr/lib/gcc-lib/<new system dir>/<gcc version>/include":
% gcc -b i486-linuxglibc2 -nostdinc -I/usr/i486-linuxglibc2/include \
-I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include glibc.c -o glibc
Az ldd parancs seg�ts�g�vel ellen�rizd, hogy a ford�t� t�nyleg a glibc2-vel szerkesztette-e �ssze a programocsk�t �s nem a r�gi libc-vel:
% ldd glibc
libc.so.6 => /usr/i486-linuxglibc2/lib/libc-2.0.6.so (0x4000d000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Ha a programot le tudtad ford�tani, a gcc az �j glibc2-h�z szerkesztette �s amikor elind�tod, azt �rja ki, hogy "hello world!", a telep�t�s sikeres volt.
Ez a r�sz arr�l sz�l, hogy hogyan telep�tsd a glibc 2-t els�dleges C k�nyvt�rk�nt. Ezek ut�n minden program amit a rendszereden ford�tasz az �j C programk�nyvt�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 Linuxot 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 glibc 2-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 leterhelt i686@200 g�pen ugyanez kb. f�l �r�ba ker�l.
Ahhoz, hogy le tudd ford�tani a forr�st, ki kell csomagolnod. 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 bele. Mindent ebben a k�nyvt�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 helyezned, 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
k�nyvt�rb�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 �ssze�ll�t�st�l 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 alatt a /usr/include/g++
k�nyvt�rban tal�lhat�k �s a
/usr/lib/g++-include
kapocs a /usr/include/g++
-ra mutat.
Az ut�bbi esetben val�sz�n�leg szerencs�sebb az eredeti g++ include k�nyvt�rat visszahelyezni a /usr/include
k�nyvt�rba.
/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�hez. 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 �thelyezni, 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 a csomagok tartalm�t:
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, viszont 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 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 azt.
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 utols� l�p�sek�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
Ezek ut�n m�dos�tsd a specs
f�jlt, ami ebben a k�nyvt�rban tal�lhat�.
�rd �t a /lib/ld-linux.so.1
sz�veget /lib/ld-linux.so.2
-re. Ha ez megvan, t�r�lj ki minden %{...:-lgmon}
f�jlra mutat� hivatkoz�st, mert a glibc nem haszn�lja a gmon k�nyvt�rat.
Tal�lsz egy p�lda spec f�jlt a
P�lda specs f�jl fejezetben.
A programk�nyvt�r ellen�rz�s�hez, hozz l�tre egy glibc.c nev� f�jlt a k�vetkez� tartalommal:
#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.
Vannak olyan alkalmak, amikor nem az els�dleges programk�nyvt�rat szeretn�d haszn�lni ford�t�skor. Ez a r�sz azt �rja le, hogy ezt hogyan teheted meg. A felhaszn�lt k�nyvt�r- �s f�jlnevek megegyeznek az el�z� r�szben haszn�ltakkal. Ne felejtsd el megv�ltoztatni ezeket a neveket a telep�t�sednek megfelel�en.
Miel�tt b�rmilyen olyan programot ford�tan�l, amit a Linux a rendszer indul�sakor haszn�l (a nem root part�ci�k felcsatol�sa el�tt), ne felejtsd el, hogy ha a program dinamikusan linkelt, sz�ks�ge van a programk�nyvt�rakra a root part�ci�n. Ha megfigyelted az el�z� r�szben le�rt telep�t�st, hi�ba a glibc az �j C programk�nyvt�r, a r�gi libc is megmaradt a /lib
k�nyvt�rban, ami a root part�ci�n van. Ez azt jelenti, hogy a r�gi libc-vel �sszeszerkesztett programok tov�bbra is haszn�lhat�k az indul�si folyamat sor�n.
Ha viszont a /usr
nem a root part�ci�n van �s a glibc-t teszt k�nyvt�rk�nt telep�ted a /usr/i486-linuxglibc2
k�nyvt�rba, minden �j, a teszt k�nyvt�rral ford�tott program m�k�d�sk�ptelen lesz, am�g nincs felcsatolva a /usr
k�nyvt�rat tartalmaz� part�ci�.
Ahhoz, hogy egy programot a teszt glibc k�nyvt�rral ford�ts, be kell �ll�tanod az include k�nyvt�rak �s f�jlok el�r�si �tvonalait �gy, hogy azok a teszt glibc k�nyvt�rban l�v� include f�jlokra mutassanak. Ha a parancssoron megadod a
"-nostdinc" kapcsol�t, az t�rli a hivatkoz�sokat az alap�rtelmezett include el�r�si �tvonalakat, a
"-I/usr/i486-linuxglibc2/include" pedig megadja a glibc include f�jlok hely�t.
Meg kell m�g add a gcc include f�jljait, amelyek a
/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include
k�nyvt�rban tal�lhat�k (akkor, ha 2.7.2.2-es gcc-t haszn�lsz �s a teszt programk�nyvt�rat az i486-linuxglibc2 k�nyvt�rba telep�tetted).
Meg kell add ezeken k�v�l a gcc be�ll�t�sait. Ezt megteheted a "-b i486-linuxglibc2" kapcsol�val.
A legt�bb programn�l megadhatod ezeket a kapcsol�kat a makefile
$CFLAGS
�s $LDFLAGS
opci�in�l:
CFLAGS = -nostdinc -I/usr/i486-linuxglibc2/include \
-I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include \
-b i486-linuxglibc2
LDFLAGS = -b i486-linuxglibc2
Ha configure szkriptet haszn�lsz a ford�t�s el�tt, �ll�tsd be a $CFLAGS
�s $LDFLAGS
k�rnyezeti v�ltoz�kat (csh/tcsh-ban haszn�ld az env/setenv parancsokat,
sh/bash-ban haszn�ld a set/export-ot ) a configure futtat�sa el�tt. Az �gy gener�lt makefile f�jlokban szerepelnie kell a megfelel� $CFLAGS
�s $LDFLAGS
be�ll�t�soknak. Nem minden configure szkript olvassa ki a parancs�rtelmez� k�rnyezet�b�l a v�ltoz�kat, ez�rt ellen�rizni kell a makefile-t, �s k�zzel jav�tani sz�ks�g eset�n.
Ha a ford�tand� program csak a gcc-t h�vja meg (�s nem egyenesen a cpp-t vagy a binutils-t), haszn�lhatod a k�vetkez� szkriptet a kapcsol�k megad�s�ra:
#!/bin/bash
/usr/bin/gcc -b i486-linuxglibc2 -nostdinc \
-I/usr/i486-linuxglibc2/include \
-I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include "$@"
Haszn�ld ezt a szkriptet ford�t�sn�l a "gcc" helyett.
Ha a r�gi libc k�nyvt�rral akarsz programot ford�tani �s a glibc-t els�dleges k�nyvt�rk�nt telep�tetted, vissza kell �ll�tsad az include f�jlok el�r�si �tvonal�t a r�gi include f�jlok�ra. Meg kell add a "-nostdinc" kapcsol�t, ez t�rli az alap�rtelmezett be�ll�t�sokat, majd a "-I/usr/i486-linuxlibc5/include" kapcsol�val be kell �ll�tanod a libc5 include f�jljainak az el�r�si �tvonal�t. Meg kell m�g adnod a "-I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include" kapcsol�t, amely a gcc specifikus include f�jlok hely�t adja meg. Ne felejtsd el, az itt megadott k�nyvt�rneveket a saj�t rendszerednek megfelel�en megv�ltoztatni (k�nyvt�rnevek �s gcc verzi�).
V�g�l meg kell add a gcc be�ll�t�sait, a "-b i486-linuxlibc5" kapcsol�val.
A legt�bb programn�l megadhatod ezeket a kapcsol�kat a makefile
$CFLAGS
�s $LDFLAGS
opci�in�l:
CFLAGS = -nostdinc -I/usr/i486-linuxlibc5/include \
-I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include \
-b i486-linuxlibc5
LDFLAGS = -b i486-linuxlibc5
Ha configure szkriptet haszn�lsz a ford�t�s el�tt, �ll�tsd be a $CFLAGS
�s $LDFLAGS
k�rnyezeti v�ltoz�kat (csh/tcsh-ban haszn�ld az env/setenv parancsokat,
sh/bash-ban haszn�ld a set/export-ot ) a configure futtat�sa el�tt. Az �gy gener�lt makefile f�jlokban szerepelnie kell a megfelel� $CFLAGS
�s $LDFLAGS
be�ll�t�soknak. Nem minden configure szkript olvassa ki a parancs�rtelmez� k�rnyezet�b�l a v�ltoz�kat, ez�rt ellen�rizni kell a makefile-t, �s k�zzel jav�tani sz�ks�g eset�n.
Ha a ford�tand� program csak a gcc-t h�vja meg (�s nem egyenesen a cpp-t vagy a binutils-t), haszn�lhatod a k�vetkez� szkriptet a kapcsol�k megad�s�ra:
#!/bin/bash
/usr/bin/gcc -b i486-linuxlibc5 -nostdinc \
-I/usr/i486-linuxlibc5/include \
-I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include "$@"
Haszn�ld ezt a szkriptet ford�t�sn�l a "gcc" helyett.
A libg++ haszn�lja a matematikai programk�nyvt�rat, teh�t a libm k�nyvt�rhoz van kapcsolva. Mivel a megl�v� libg++ k�nyvt�rad a r�gi C programk�nyvt�rat haszn�lja, �jra kell ford�tanod a glibc-vel, vagy telep�tened kell egy bin�ris k�nyvt�rat (amit glibc-vel ford�tottak). A libg++ legfrissebb v�ltozat�t (forr�sk�dot vagy bin�ris csomagot x86-os architekt�r�hoz) let�ltheted a ftp://ftp.yggdrasil.com/private/hjl/ ftp helyr�l.
Ha teszt k�nyvt�rk�nt telep�tetted a glibc-t, abba a k�nyvt�rba kell telep�tened a f�jlokat, amelyikben a glibc tal�lhat� (pl.
/usr/i486-linuxglibc2
, az el�z� fejezetekben le�rt p�ld�k alapj�n).
Ha bin�ris csomagb�l telep�ted a libg++ k�nyvt�rat (amit forr�n aj�nlok, mert m�g sohasem volt szerencs�m �gy libg++ k�nyvt�rat ford�tani), csomagold ki a f�jlokat egy �tmeneti k�nyvt�rba, majd helyezd �t a usr/lib/
k�nyvt�rban l�v� f�jlokat az <install directory>/lib/
k�nyvt�rba, a usr/include/
-ban l�v� f�jlokat a
<install directory>/include/
k�nyvt�rba (ne felejtsd el el�sz�r t�r�lni az include/g++
kapcsot!) �s a usr/bin/
-ben l�v� f�jlokat az <install directory>/bin/
k�nyvt�rba.
Ha a glibc-t els�dleges k�nyvt�rk�nt telep�tetted, el�sz�r �t kell helyezned a r�gi libg++ f�jljaidat a r�gi libc k�nyvt�rba, abban az esetben ha ezen t�l is akarsz ford�tani g++ programokat a r�gi libc-vel. val�sz�n�leg ennek az a legegyszer�bb m�dja, hogy telep�tesz egy libc5-el ford�tott �j libg++, mint az el�z� fejezetben �s ut�na feltelep�ted a glibc-t norm�lisan.
Ha C++ programokat szeretn�l nem els�dleges libc-vel ford�tani, meg kell add a g++ include k�nyvt�rat, ami a fenti p�ld�k eset�n /usr/i486-linuxglibc2/include/g++
lenne teszt glibc konfigur�ci� eset�n vagy /usr/i486-linuxlibc5/include/g++
els�dleges glibc konfigur�ci� eset�n.
Ezt �ltal�ban el lehet �rni a $CXXFLAGS
v�ltoz� m�dos�t�s�val:
CXXFLAGS = -nostdinc -I/usr/i486-linuxglibc2/include \
-I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include \
-I/usr/i486-linuxlibc5/include/g++ -b i486-linuxglibc2
A glibc csomagban tal�lhat� egy GYIK (FAQ), amiben tov�bbi inform�ci�t �s megold�sokat tal�lhatsz a probl�m�kra. A GYIK-nek van egy h�l�zaton el�rhet� v�ltozata is: http://www.imaxx.net/~thrytis/glibc/glibc-FAQ.html. Most kiemeln�k n�h�ny probl�m�t, amikr�l a GYIK-ben nincs (vagy nem el�g r�szletesen van) sz�.
A glibc 2 m�s m�dszert haszn�l a g�pnevek felold�s�ra, mint a libc5.
A glibc "name server switch" (NSS) k�dr�sze keresi a /etc/nsswitch.conf
f�jlt. Ha nem m�k�dik a g�pn�v felold�s, amikor glibc 2 k�nyvt�rat haszn�l� alkalmaz�sokat futtatsz, �s a /etc/resolv.conf
f�jlod megvan, �s tartalmazza a sz�ks�ges inform�ci�kat, n�zd meg, hogy van-e /etc/nsswitch.conf
f�jlod. Ha nincs ilyen nev� f�jl, akkor hozz l�tre egyet, a k�vetkez� tartalommal:
hosts: files dns
Ezzel be�ll�tottad, hogy a n�vkiszolg�l�kra vonatkoz� inform�ci�k a /etc/resolv.conf
f�jlban vannak.
Ha tov�bbi r�szletek is �rdekelnek, olvasd el a libc info lapj�t, amiben r�szletesen le van �rva a nsswitch.conf f�jl fel�p�t�se.
Ha �gy gondolod, hogy hiba van a programk�nyvt�rban, olvasd el el�sz�r a GYIK-et. Nem kiz�rt, hogy m�snak esetleg ugyanaz a probl�m�ja volt, mint Neked, �s van egyszer� megold�s. Ellen�rizd m�g a glibc csomagj�ban tal�lhat� INSTALL
f�jl "Recommended Tools to Install the GNU C Library" r�sz�t, mert a probl�m�d ad�dhat m�s program hib�j�b�l is, nem felt�tlen�l a glibc m�k�dik rosszul.
Ha hib�t tal�lt�l, el�sz�r gy�z�dj meg r�la, hogy t�nyleg igazi hib�r�l van sz�. Ennek ellen�rz�s�re egy j� m�dszer, ha �sszehasonl�tod a GNU C programk�nyvt�r �s valamilyen m�sik C programk�nyvt�r viselked�s�t. Ha ugyanaz az eredm�ny mind a k�t programk�nyvt�rral, akkor val�sz�n�leg nem hib�r�l van sz� (b�r nem 100%). Ha a k�t k�nyvt�r viselked�se nem egyezik meg, akkor val�sz�n�, hogy hib�t tal�lt�l.
Ezek ut�n n�zd meg a
http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl c�men el�rhet� hib�kat tartalmaz� adatb�zist (bug database). Lehet, hogy valaki m�r el�tted bejelentette a hib�t. �rdemes megn�zni a glibc csomagban tal�lhat� BUGS
f�jlt, amiben szint�n az ismert hib�k list�ja tal�lhat�.
Ha m�r biztos vagy benne, hogy �j hib�t tal�lt�l, pr�b�ld meg�llap�tani a lehet� legpontosabban, egy nagyon egyszer� tesztprogrammal, hogy mi okozza a hib�t. A C program k�nyvt�r eset�ben ez azt jelenti, hogy meg kell �llap�tanod, hogy melyik f�ggv�nyh�v�s id�zi el�. Ez nem t�l neh�z feladat.
A legutols� l�p�s, amikor megvan az egyszer� kis tesztprogram, a hiba bejelent�se. A hiba bejelent�s�n�l, k�ldd el a tesztprogramot, az eredm�nyeket amiket kapt�l, az eredm�nyeket amiket v�rt�l, esetleg arr�l valamit, hogy szerinted mi lehet a gond (ha van valami �tleted), a rendszer t�pus�t, a GNU C programk�nyvt�r verzi�j�t, a gcc ford�t� verzi�j�t �s a GNU Binutils verzi�j�t. Mell�keld m�g a config.status
�s config.make
f�jlokat, ezeket abban a k�nyvt�rban tal�lod, ahonnan a configure
szkriptet futtattad.
Minden a GNU C k�nyvt�rral kapcsolatos hibabejelent�st a glibcbug
shell szkipt seg�ts�g�vel kell elk�ldeni a
bugs@gnu.org c�mre (m�k�dik m�g a r�gi
bugs@gnu.ai.mit.edu c�m is), vagy a GNATS webes interf�sz�n kereszt�l a
http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl honlapon.
Javaslatokat �s k�rd�seket a bugs-glibc@prep.ai.mit.edu levelez�list�ra lehet k�ldeni. Ha nem olvasod a gnu.bug.glibc h�rcsoportot, feliratkozhatsz a list�ra a bug-glibc-request@prep.ai.mit.edu honlapon.
K�rlek NE k�ldj�l GNU C k�nyvt�rral kapcsolatos hibabejelent�st a <bug-gcc@prep.ai.mit.edu> c�mre. Ez a lista a GNU CC hib�ival foglalkozik. A GNU CC �s a GNU C k�nyvt�r k�t k�l�n dolog, k�l�nb�z� emberek tartj�k karban.
Ide besz�rtam egy specs
f�jlt, amit a gcc haszn�l a glibc 2-vel ford�t�sn�l �s linkel�sn�l. A f�jl a /usr/lib/gcc-lib/<new system dir>/<gcc version>
k�nyvt�rban tal�lhat�. Ha x86-os rendszered van, val�sz�n�leg bem�solhatod a f�jlba ezt a r�szt egy az egyben.
*asm:
%{V} %{v:%{!V:-V}} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}
*asm_final:
%{pipe:-}
*cpp:
%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{!m386:-D__i486__}
%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}
*cc1:
%{profile:-p}
*cc1plus:
*endfile:
%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s
*link:
-m elf_i386 %{shared:-shared} %{!shared: %{!ibcs: %{!static:
%{rdynamic:-export-dynamic} %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}}
%{static:-static}}}
*lib:
%{!shared: %{pthread:-lpthread} %{profile:-lc_p} %{!profile: -lc}}
*libgcc:
-lgcc
*startfile:
%{!shared: %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:%{profile:gcrt1.o%s}
%{!profile:crt1.o%s}}}} crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}
*switches_need_spaces:
*signed_char:
%{funsigned-char:-D__CHAR_UNSIGNED__}
*predefines:
-D__ELF__ -Dunix -Di386 -Dlinux -Asystem(unix) -Asystem(posix) -Acpu(i386) -Amachine(i386)
*cross_compile:
0
*multilib:
. ;
Ez a lista olyan Linux felhaszn�l�k vitaf�ruma, akik feltelep�tett�k a glibc2-t, az �j GNU C programk�nyvt�rat. A t�m�k: kompatibilit�ssal �sszef�gg� k�rd�sek, programok ford�t�sa sor�n felmer�l� probl�m�k (Linux/glibc k�rnyezetben). A feliratkoz�shoz k�ldj egy levelet a Majordomo@ricardo.ecn.wfu.edu c�mre, a lev�l t�rzs�ben legyen:"subscribe glibc-linux <a saj�t e-mail c�med>".
A levelez�lista arch�vuma megtal�lhat� a http://www.progressive-comp.com/Lists/?l=linux-glibc&r=1&w=2#linux-glibc c�men.
Ezen inform�ci� nagy r�sz�t a GNU Libc honlapr�l loptam, valamint Ulrich Drepper <drepper@gnu.ai.mit.edu> glibc 2 bejelent�seib�l �s megjegyz�seib�l. Andreas Jaeger-t�l <aj@arthur.rhein-neckar.de> sz�rmazik a hibabejelent�st le�r� fejezet egy r�sze.
A k�vetkez�k voltak seg�ts�gemre e dokumentum �ssze�ll�t�s�ban:
Ezt a dokumentumot k�l�nb�z� nyelvekre ford�tj�k:
Ezen HOGYAN �r�s�t�l, valamint a glibc 2 for Linux honlap karbantart�s�t�l eltekintve semmi k�z�m sincs a glibc projekthez. T�vol �llok att�l, hogy mindent tudjak a t�mak�rr�l, ennek ellen�re sz�vesen megpr�b�lok seg�teni, ha gondjaid t�madnak. Sz�vesen l�tok minden visszajelz�st, jav�t�st vagy kieg�sz�t�st a ejg3@cornell.edu c�men.
Copyright © Eric Green, 1997.
Ez a dokumentum tov�bbadhat� az LDP licenc�ben r�gz�tett felt�telek mellett.
A magyar ford�t�st Kov�cs Emese k�sz�tette (1999). A lektor�l�st Daczi L�szl� v�gezte el (2002.12.28). B�rmilyen ford�t�ssal kapcsolatos �szrev�telt a linuxhowto@sch.bme.hu c�mre k�ldjetek. Eme dokumentum legfrissebb v�ltozata megtal�lhat� a Magyar Linux Dokument�ci�s Projekt honlapj�n.