<!doctype linuxdoc system>

<article>

<title>Glibc 2 HOWTO
<author>Eric Green, <tt/ejg3@cornell.edu/. Översättare: Linus
Åkerlund, <tt/uxm165t@tninet.se/.
<date>v1.5, 8 February 1998. Översättning: 26 juli 1998.
<abstract>
<nidx>GNU C libary (see glibc)</nidx>
<nidx>glibc</nidx>
Glibc2-HOWTOn tar upp installering och användning av GNU C-bibliotek
version 2 (libc 6) på Linux-system.
</abstract>

<toc>


<sect>Inledning
<p>

<sect1>Om glibc 2.
<p>
<nidx>glibc!overview</nidx>

Glibc 2 är den senaste versionen av GNU C-biblioteket. För tillfället
kan det köras oförändrat på GNU/Hurd-system och Linux i386-, m68k- och
Alpha-system. Stöd för Linux PowerPC, MIPS, Sparc, Sparc 64 och Arm
kommer finnas i och med version 2.1. I framtiden kommer stöd för andra
arkitekturer och operativsystem läggas till.

Under Linux används glibc 2 som libc med versionsnummer 6, alltså som
uppföljaren till Linux libc 5. Det avses av Linux libc-utvecklarna
ersätta libc 5 så småningom. I och med 2.0.6 anses glibc vara
stabilt. Version 2.1 (som bör vara ute snart) kommer vara klar att
användas i alla sammanhang, och kommer stödja flera arkitekturer och
ha nya funktioner.

Tre valfria tillägg finns tillgängliga för glibc 2:

<descrip>
<tag/Crypt/UFC-crypt-paketet. Det hålls separat på grund av
export-restriktioner. 
<tag/LinuxThreads/En implementering av Posix 1003.1c
&dquot;pthread&dquot;-gränssnittet. 
<tag/Locale data/Innehåller alls som behövs för att skapa
locale-datafiler, för att utnyttja glibcs
internationaliserings-funktioner.
</descrip>

Crypt- och LinuxThreads-tilläggen är starkt rekommenderade... Om du
inte använder dem riskerar du att ditt glibc inte är kompatibelt med
biblioteken på andra system. (Om du inte vill använda dem måste du
lägga till parametern --disable-sanity-checks när du kör configure.)

<sect1>Om detta dokument.
<p>

Denna HOWTO tar upp installering av glibc 2-biblioteket på ett
existerande Linux-system. De är riktat till användare av
Intel-baserade system som för tillfället använder libc 5, men
användare av andra system och alternativa bibliotek (som t.ex. glibc
1) bör också kunna använda denna information genom att sätta in
passande filnamn och arkitekturer där detta ska göras. 

Den senaste versionen av denna HOWTO hittar du hos
<url url="http://sunsite.unc.edu/LDP" name="Linux Documentation Project">
och <url url="http://www.imaxx.net/~thrytis/glibc/Glibc2-HOWTO.html">.

Den svenska versionen ska finnas tillgänglig från
<url url="http://www.swe-doc.linux.nu/" name="www.swe-doc.linux.nu">
och <url url="http://user.tninet.se/~uxm165t/linux_doc.html" name="min
hemsida">.

<sect1>Nyligen gjorda ändringar i detta dokument.
<p>

Skillnader mellan version 1.5 och 1.4:

<itemize>
<item>Indexering tillagt av Ed Bailey.
<item>Ändrade min epost-adress (original-författarens. övers.anm.)
</itemize>

Skillnader mellan version 1.4 och 1.3:
<itemize>
<item>Ändrade status från experimentellt till stabilt.
<item>Uppdaterade listan över utvecklingsversioner.
<item>Uppdaterade senaste versionen till 2.0.6.
</itemize>


<sect>Att välja installeringsmetod.
<p>
<nidx>glibc!installing</nidx>

Det finns några olika sätt att installera glibc. Du kan installera
biblioteken som ett test, och använda de existerande biblioteken som
standard, vilket låter dig pröva de nya biblioteken genom att använda
olika parametrar då du kompilerar dina program. Installerar du på
detta sätt är det enkelt att ta bort glibc i framtiden (men detta gör
att inget program som är länkat med glibc fungerar längre, då
biblioteken är borttagna). Vill du använda glibc som testbibliotek så
måste du kompilera det från källkod. Det finns ingen binärdistribution
för att installera biblioteken på detta sätt. Denna installering
beskriv i <ref id="test-install" name="Installera som ett
test-bibliotek">.

Det andra sättet att installera, som beskrivs i det här dokumentet, är
att använda glibc som ditt primära bibliotek. alla nya program som du
kompilerar på ditt system kommer använda glibc, men du kan länka
programmen med ditt gamla bibliotek genom att ange andra parametrar då
du kompilerar. Du kan antingen installera biblioteken från binärer
eller kompilera själv. Om du vill ändra optimerings- eller
konfigurerings-alternativ eller använda ett tillägg som inte
distribueras med binärpaketet så måste du skaffa källkoden och
kompilera den. Denna installeringsprocedur beskrivs i <ref
id="primary-install" name="Installera som primärt C-bibliotek">.

Frodo Looijaard beskriver ännu ett annat sätt att installera
glibc. Hans metod går ut på att installera glibc som sekundärt
bibliotek och konfigurera en korskompilator (cross compiler) för att
kompilera med glibc. Installeringsproceduren för denna metod är mer
komplicerad än test-biblioteksinstalleringen som beskrivs i detta
dokument, men gör det mycket enklare att kompilera när du länkar med
glibc. Denna metod beskrivs i hans dokument <url
url="http://huizen.dds.nl/~frodol/glibc/" name="Installing glibc-2 on
Linux">. 

Om du kör Debian 1.3 men inte vill uppgradera till en instabil version
av Debian för att kunna använda glibc så beskriver
<url url="http://www.gate.net/~storm/FAQ/libc5-libc6-Mini-HOWTO.html"
name="Debian libc5 to libc6 Mini-HOWTO"> hur du kan uppgradera ditt
system med Debian-paket.

Om du installerar glibc 2 på ett viktigt system så bör du nog välja
test-installeringen. Även om det inte finns några buggar så kommer
vissa program kräva vissa modifikationer innan de kan kompileras,
p.g.a. ändringar i funktions-prototyper och typer. 

<sect>Skaffa biblioteket.<label id="getting">
<p>
<nidx>glibc!obtaining</nidx>

glibc 2 består av glibc-paketet och tre valfria tilläggspaket;
LinuxThreads, Locale och Crypt. Källkoden hittar du bl.a. på:
<itemize>
<item><url url="ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.6.tar.gz">
<item><url url="ftp://prep.ai.mit.edu/pub/gnu/glibc-linuxthreads-2.0.6.tar.gz">
<item><url url="ftp://prep.ai.mit.edu/pub/gnu/glibc-localedata-2.0.6.tar.gz">
<item><url url="ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.6.tar.gz">
</itemize>

Den tar upp ungefär 150 MB diskutrymme för en fullständig kompilering
och installering. Den grundläggande binärinstalleringen av bara kärnan
i biblioteket är på ungefär 50 MB.

Binärpaket för 2.0.6 är inte tillgängliga. Binärpaket av version 2.0.4
finns tillgängliga för i386 och m68k, och version 2.0.1 för
Alpha. Dessa hittar du på:
<itemize>
<item>Intel x86:
<itemize>
<item><url url="ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.4.bin.i386.tar.gz">
<item><url url="ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.4.bin.i386.tar.gz">
</itemize>
<item>Alpha:
<itemize>
<item><url url="ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.1.bin.alpha-linux.tar.gz">
<item><url url="ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.1.bin.alpha-linux.tar.gz">
</itemize>
<item>m68k:
<itemize>
<item><url url="ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.4-m68k-linux.bin.tar.gz">
<item><url url="ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.4-m68k-linux.bin.tar.gz">
</itemize>
</itemize>
Crypt-tillägget är belagt med exportrestriktioner. Bor du utanför
U.S.A. kan du hämta detta från <url url="ftp://ftp.ifi.uio.no/pub/gnu">.

Om du kör en Red Hat-distribution så kan du skaffa glibc 2 som
RPM-paket från <url url="ftp://ftp.redhat.com/pub/redhat/">.  glibc 2
är det primära C-biblioteket för Red Hat 5.0.

Om du kör en Debian-distribution kan du hämta glibc 2-paket från
<url url="ftp://ftp.debian.org/debian/dists/unstable/main/">. Filerna
heter libc6. glibc 2 är nu med i baspaketet av hamm-versionen av
Debian och kommer vara det primära C-biblioteket när Debian 2.0 kommer
ut.

<sect>Installera som ett test-bibliotek.<label id="test-install">
<p>
<nidx>glibc!testing</nidx>

Detta avsnitt tar upp installeringen av glibc 2 som ett
test-bibliotek. Allt du kompilerar kommer länkas med dina existerande
bibliotek om du inte ger några extraparametrar för att länka med de
nya biblioteken. Det verkar som att sökvägarna kompileras in i en hel
del filer, så du gör antagligen bäst i att installera biblioteket från
källkod.

<sect1>Kompilera och installera.
<p>

<sect2>Förutsättningar.
<p>
<nidx>glibc!testing!prerequisites</nidx>

<itemize>
<item>Runt 150 MB fritt diskutrymme
<item>GNU make 3.75
<item>gcc &gt;= 2.7.2 (ännu hellre 2.7.2.1)
<item>binutils 2.8.1 (till Alpha behöver du ett snapshot)
<item>bash 2.0
<item>autoconf 2.12 (om du ändrar configure.in)
<item>texinfo 3.11
</itemize>

På en i586@133 med 64 MB RAM tar det runt 3 timmar att kompilera med
fullständiga bibliotek och tillägg. På en laddad i686@200 tar det runt
en halvtimme.

<sect2>Packa upp källkoden.
<p>
<nidx>glibc!testing!sources, extracting</nidx>

Du måste packa upp källkoden från arkivet så att du kan kompilera
den. Det bästa sättet att göra detta på är:
 <tscreen><verb>
 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
 </verb></tscreen>
Detta kommer att placera linuxthreads-, crypt- och
localedata-katalogerna i glibc-2.0.6-katalogen där configure kan hitta
dessa tillägg.

<sect2>Konfigurering.
<p>
<nidx>glibc!testing!configuring</nidx>

I glibc-2.0.6-katalogen ska du skapa en katalog som heter compile och
cd-a till den. Allt arbete kommer göras i denna katalog, vilket
förenklar städningen. (Utvecklarna har inte brytt sig speciellt mycket
om att göra 'make clean' perfekt än.)
 <tscreen><verb>
 mkdir compile
 cd compile
 </verb></tscreen>
Kör <tt>../configure</tt>. För att använda tilläggspaketen måste du
ange dessa med --enable-add-ons, 
t.ex. --enable-add-ons=linuxthreads,crypt,localedata. Du måste även 
välja en katalog att installera i. /usr/i486-linuxglibc2 är ett bra 
val. configure-raden för detta blir: 
 <tscreen><verb>
 ../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr/i486-linuxglibc2
 </verb></tscreen>

<sect2>Kompilera och installera.
<p>
<nidx>glibc!testing!compiling</nidx>
<nidx>glibc!testing!installing</nidx>

För att kompilera och verifiera, kör:
 <tscreen><verb>
 make
 make check
 </verb></tscreen>
Om 'make check' går bra så kan du installera biblioteket:
 <tscreen><verb>
 make install
 </verb></tscreen>

<sect1>Uppdatera den dynamiska laddaren.
<p>
<nidx>glibc!testing!dynamic loader, updating</nidx>
<nidx>glibc!testing!ld.so.conf, updating</nidx>

<enum>
<item>Skapa en länk från den nya <tt>ls.so</tt> till
<tt>/lib/ld-linux.so.2</tt>:
 <tscreen><verb>
 ln -s /usr/i486-linuxglibc2/lib/ld-linux.so.2 /lib/ld-linux.so.2
 </verb></tscreen>
Detta är det enda biblioteket vars position är fast då ett program
länkas, och att använda en länk i <tt>/lib</tt> gör det lättare att
uppgradera till glibc som ditt primära C-bibliotek när den stabila
versionen ges ut. 
<item>Editera <tt>/etc/ld.so.conf</tt>. Du måste, i slutet av filen,
lägga till sökvägen till lib-katalogen där det nya biblioteket finns,
vilket blir <tt>&lt;prefix&gt;/lib</tt>, alltså
<tt>/usr/i486-linuxglibc2/lib</tt> i exemplet ovan. Då du modifierat
<tt>/etc/ld.so.conf</tt> kan du köra
 <tscreen><verb>
 ldconfig -v
 </verb></tscreen>
</enum>

<sect1>Konfigurering för gcc.
<p>
<nidx>glibc!testing!gcc configuration</nidx>
Det sista steget i installeringen är att uppdatera
<tt>/usr/lib/gcc-lib</tt>, så att gcc vet hur det ska använda de nya
biblioteken. Först måste du ta en kopia av de existerande
inställningarna. För att ta redan på vilken konfigurering du har för
tillfället kan du använda parametern -v till gcc:
 <tscreen><verb>
 &percnt; gcc -v
 Reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
 gcc version 2.7.2.2
 </verb></tscreen>
I detta fall är i486-unknown-linux systemet och 2.7.2.2 är
versionen. Du måste kopiera <tt>/usr/lib/gcc-lib/&lt;system&gt;</tt>
till den nya test-systemkatalogen:
 <tscreen><verb>
 cd /usr/lib/gcc-lib/
 cp -r i486-unknown-linux i486-linuxglibc2
 </verb></tscreen>
Gå till din nya test-systemkatalog och versionskatalog:
 <tscreen><verb>
 cd /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2
 </verb></tscreen>
och editera filen <tt>specs</tt>. I denna fil ska du byta ut
<tt>/lib/ld-linux.so.1</tt> mot <tt>/lib/ld-linux.so.2</tt>. Du måste
också radera alla uttryck <tt/&percnt;{...:-lgmon}/ i filen, eftersom
glibc inte använder gmon-biblioteket för "profiling". Ett exempel på
en specs-fil kan du hitta i avsnittet <ref id="specs" name="Exempel på
specs-fil">. 

<sect1>Uppdatera länkar till header-filer
<p>
<nidx>glibc!testing!header files, updating</nidx>

Du måste skapa länkar i din nya include-katalog till andra
include-kataloger:
 <tscreen><verb>
 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
 </verb></tscreen>
Det kan också hända att du har andra bibliotek, såsom ncurses, som
behöver ha sina header-filer i denna katalog. Du bör kopiera eller
länka filerna från <tt>/usr/include</tt>. (Vissa bibliotek kan behöva
kompileras om med glibc2 för att fungera med det. I dessa fall är det
bara att kompilera och installera paketen i
<tt>/usr/i486-linuxglibc2</tt>.)

<sect1>Testa din installering.
<p>
<nidx>glibc!testing</nidx>

För att testa installeringen, skapa följande program i filen glibc.c:
 <tscreen><verb>
 &num;include &lt;stdio.h&gt;

 main()
 {
     printf("hej världen!\n");
 }
 </verb></tscreen>
och kompilera det med parametrarna &dquot;-b &lt;bas-installerings-katalog&gt; -nostdinc -I&lt;installerings-katalog&gt;/include -I/usr/lib/gcc-lib/&lt;ny system-katalog&gt/&lt;gcc version&gt;/include&dquot;:
 <tscreen><verb>
 &percnt; 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
 </verb></tscreen>
Använd ldd för att verifiera att programmet länkades med glibc2 och
inte med ditt gamla libc:
 <tscreen><verb>
 &percnt; 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)
 </verb></tscreen>
Om det kompilerar, länkarna stämmer och det visar &dquot;hej
världen!&dquot; när det körs så har installeringen lyckats.



<sect>Installera som primärt C-bibliotek.<label id="primary-install">
<p>
<nidx>glibc!installation</nidx>

Detta avsnitt tar upp installeringen av glibc 2 som ditt primära
C-bibliotek. Alla nya program du kompilerar kommer länkas med detta
bibliotek om du inte anger speciella kompileringsparametrar, för att
länka med en annan version.

Om du använder RedHat eller Debian och har laddat ner de rätta rpm-
eller deb-filerna så kan du titta på deras
installeringsinstruktioner. Du kan hoppa över det här avsnittet.

<sect1>Bygga biblioteket från källkod.<label id="compiling">
<p>
<nidx>glibc!installation!compilation</nidx>

Detta avsnitt förklarar hur du kompilerar källkoden till glibc 2 och
tilläggen. Du måste kompilera biblioteket om du vill ändra
optimeringar eller inställningar eller använda ett paket som du inte
har binärt.

<sect2>Förutsättningar.
<p>
<nidx>glibc!installation!prerequisites</nidx>

<itemize>
<item>Runt 150 MB fritt hårddiskutrymme
<item>GNU make 3.75
<item>gcc &gt;= 2.7.2 (ännu hellre 2.7.2.1)
<item>binutils 2.8.1 (till Alpha behöver du ett snapshot)
<item>bash 2.0
<item>autoconf 2.12 (om du ändrar configure.in)
<item>texinfo 3.11
</itemize>

På en i586@133 med 64 MB RAM tar det runt 3 timmar att kompilera med
fullständiga bibliotek och tillägg. På en laddad i686@200 tar det runt
en halvtimme.

<sect2>Packa upp källkoden.
<p>
<nidx>glibc!installation!sources, extracting</nidx>

Du måste packa upp källkoden från arkiven så att du kan kompilera
den. Det bästa sättet att göra detta på är:
 <tscreen><verb>
 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
 </verb></tscreen>
Detta placerar linuxthreads-, crypt- och localedata-kataloger i
katalogen glibc-2.0.6, där configure kan hitta dessa tillägg.

<sect2>Konfigurering.
<p>
<nidx>glibc!installation!configuration</nidx>

Skapa en katalog som heter compile i <tt>glibc-2.0.6</tt>-katalogen
och cd-a till den. Allt arbete kommer utföras i denna katalog, vilket
kommer underlätta städningen efteråt. (Utvecklarna har inte brytt sig
så mycket om att få 'make clean' perfekt än.)

<tscreen><verb>
mkdir compile
cd compile
</verb></tscreen>
Kör <tt>../configure</tt>. För att använda tilläggspaketen måste du
ange dem med --enable-add-ons, alltså 
t.ex. --enable-add-ons=linuxthreads,crypt,localedata. Du bör 
antagligen också ange var du vill installera det. För att matcha de
standardiserade Linux-distributionerna kan du ange --prefix=/usr. (När 
prefixet anges som <tt>/usr</tt> vet configure om att den ska ändra
sina sökvägar för att placera libc.so och andra viktiga bibliotek i
<tt>/lib</tt>.) Hela configure-raden blir alltså:
<tscreen><verb>
 ../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr
</verb></tscreen>

<sect2>Kompilera.
<p>
<nidx>glibc!installation!compilation</nidx>

För att kompilera och verifiera, kör:
 <tscreen><verb>
 make
 make check
 </verb></tscreen>


<sect1>Förberedelser inför installeringen.
<p>
<nidx>glibc!installation!preparation for</nidx>

Nu måste du flytta runt en del filer för att göra plats för det nya
biblioteket, vare sig du installerar från källkod eller binärer. Alla
nya program du kompilerar kommer länkas med glibc, men äldre program
som inte är statiskt länkade kommer fortfarande vara beroende av libc
5, så du kan inte bara skriva över den gamla versionen.

<enum>
<item>Skapa en ny katalog att stoppa de gamla filerna i:
 <tscreen><verb>
 mkdir -p /usr/i486-linuxlibc5/lib
 </verb></tscreen>

<item>De gamla header-filerna måste evakueras från <tt>/usr/include</tt>:
 <tscreen><verb>
 mv /usr/include /usr/i486-linuxlibc5/include
 </verb></tscreen>

<item>Skapa en ny include-katalog och skapa länkar till andra
include-kataloger:
 <tscreen><verb>
 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++
 </verb></tscreen>
Länkarna kan behöva en del modifikationer, beroende på vilken
distribution du använder. Åtminstone Slackware stoppar
g++-header-filer i <tt>/usr/local/g++-include</tt>, medan Debian
stoppar header-filerna i <tt>/usr/include/g++</tt> och länkar
<tt>/usr/lib/g++-include</tt> till <tt>/usr/include/g++</tt>. I det
senare fallet gör du nog bäst i att flytta tillbaks den ursprungliga
g++-include-katalogen till <tt>/usr/include</tt>.

<item>Återställ alla extra header-filer och länkar. Vissa
tilläggsbibliotek, som ncurses, stoppar filer i <tt>/usr/include</tt>
eller stoppar en länk till sina include-kataloger i
<tt>/usr/include</tt>. Dessa filer och länkar måste återställas för
att du ska kunna använda dessa bibliotek.

<item>Lägg till din nya bibliotekskatalog (som
<tt>/usr/i486-linuxlibc5/lib</tt>) <em>längst upp</em> i din
<tt>/etc/ld.so.conf</tt>-fil. Du bör ha ld.so 1.8.8 eller senare
installerad för att inte få konstiga meddelanden när glibc är
installerat. 

<item>Flytta/kopiera all de gamla C-biblioteken till den nya
katalogen.
 <tscreen><verb>
 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
 </verb></tscreen>
<tt>libm.so.5</tt> och <tt>libc.so.5</tt> bör kopieras snarare än
flyttas om <tt>/usr</tt> finns på en annan partition än <tt>/</tt>,
eftersom de behövs av programmen som används för att starta Linux och
måste finnas på root-partitionen.

<item>Flytta <tt>/usr/lib/*.o</tt>-filerna till den nya katalogen.
 <tscreen><verb>
 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
 </verb></tscreen>

<item>Uppdatera din biblioteks-cache efter att biblioteken flyttats.
 <tscreen><verb>
 ldconfig -v
 </verb></tscreen>
</enum>


<sect1>Installering från binärpaket.
<p>
<nidx>glibc!installation!precompiled binaries</nidx>

Om du installerar glibc från förkompilerade binärer måste du:
 <tscreen><verb>
 cd /
 gzip -dc glibc-2.0.bin.i386.tar.gz | tar tvvf -
 gzip -dc glibc-crypt-2.0.bin.i386.tar.gz | tar tvvf -
 ldconfig -v
 </verb></tscreen>
Om du har en annan arkitektur eller version så ska du naturligtvis
byta ut filnamnen.

<sect1>Installera från källkod.
<p>
<nidx>glibc!installation!from source</nidx>

För att installera biblioteket från källkod, skriv:

 <tscreen><verb>
 make install
 ldconfig -v
 </verb></tscreen>


<sect1>Uppdatera gcc-specs.
<p>
<nidx>glibc!installation!gcc specs file, updating</nidx>

Det sista steget i installeringen (för båda binär- och
källkods-installering) är att uppdatera gccs <tt>specs</tt>-fil så att
du kan länka dina program. För att avgöra vilken specs-fil som gcc
använder så kör du:
 <tscreen><verb>
 &percnt; gcc -v
 reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
 gcc version 2.7.2.2
 </verb></tscreen>

I det här fallet är systemet i486-unknown-linux och 2.7.2.2 är
versionen. Du ska kopiera <tt>/usr/lib/gcc-lib/&lt;system&gt;</tt>
till den gamla system-katalogen:
 <tscreen><verb>
 cd /usr/lib/gcc-lib/
 cp -r i486-unknown-linux i486-linuxlibc5
 </verb></tscreen>

Gå till den ursprungliga katalogen katalogens versionskatalog:
 <tscreen><verb>
 cd /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2
 </verb></tscreen>

och editera filen <tt>specs</tt> som finns där. I denna fil ska du
byta ut <tt>/lib/ld-linux.so.1</tt> till
<tt>/lib/ld-linux.so.2</tt>. Du måste också ta bort alla
<tt/&percnt;{...:-lgmon}/-uttryck i filen, eftersom glibc inte
använder gmon-biblioteket för "profiling" (svensk översättning?
övers.anm.). Ett exempel på en specs-fil hittar du i avsnittet 
<ref id="specs" name="Exempel på specs-fil">.


<sect1>Testa din installering.
<p>
<nidx>glibc!installation!testing</nidx>

För att testa installeringen kan du skapa följande program i filen
glibc.c:

 <tscreen><verb>
 &num;include &lt;stdio.h&gt;

 main()
 {
     printf("hej världen!\n");
 }
 </verb></tscreen>
och kompilera programmet.
 <tscreen><verb>
 &percnt; gcc glibc.c -o glibc
 </verb></tscreen>
Använd ldd för att se efter så att programmet länkades med glibc2 och
inte ditt gamla libc:
 <tscreen><verb>
 &percnt; ldd glibc
 libc.so.6 => /lib/libc.so.6 (0x4000e000)
 /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
 </verb></tscreen>
Om kompileringen går bra och visar &dquot;hej världen!&dquot; när det
körs så var installeringen framgångsrik.


<sect>Kompilera med det icke-primära libc.
<p>
<nidx>glibc!compiling with alternate library</nidx>

Ibland kommer du vilja använda ett alternativt bibliotek att kompilera
dina program med. Detta avsnitt förklarar hur du kan göra
detta. Kataloger och installeringsnamn är desamma som i exemplen i de
två föregående avsnitten. Kom ihåg att ändra namnen för att passa dina
inställningar.

<sect1>En varning angående användandet av icke-primära libc.
<p>
<nidx>glibc!compiling with alternate library!warning</nidx>
Innan du kompilerar några program som används i systemets bootprocess
måste du tänka på att programmet länkas dynamiskt och används innan
icke-rotpartitionerna monteras, så alla länkade bibliotek måste finnas
på rotpartitionen. Om du följer installeringsprocessen i föregående
avsnitt för att installera glibc som ditt primära C-bibliotek så
lämnas det gamla libc i <tt>/lib</tt>, alltså på din
rotpartition. Detta innebär att alla dina program fortfarande kommer
att fungera då du bootar. Om dock <tt>/usr</tt> finns på en annan
partition och du installerar glibc som testbibliotek i
<tt>/usr/i486-linuxglibc2</tt>, så kommer inga nya program du
kompilerar med glibc fungera förrän din <tt>/usr</tt>-partition
monterats. 

<sect1>Kompilera program med ett test-glibc.
<p>
<nidx>glibc!compiling with alternate library!glibc</nidx>

För att kompilera ett program med ett test-installerat glibc måste du
definiera om include-sökvägarna, så att de pekar på include-filerna
för glibc. Genom att ange &dquot;-nostdinc&dquot; får du kompilatorn
att ignorera den vanliga sökvägen. 
&dquot;-I/usr/i486-linuxglibc2/include&dquot; gör att den hittar
include-filerna för glibc. Du måste även ange include-filerna för gcc,
vilka finns i
<tt>/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include</tt> (förutsatt
att du installerat test-biblioteket i i486-linuxglibc med gcc
2.7.2.2).

För att länka ett program med ett test-installerat glibc måste du ange
korrekt gcc-setup. Detta gör du genom att ange parametern &dquot;-b
i486-linuxglibc2&dquot;. 

För de flesta program kan de ange dessa nya parametrar genom att lägga
till dem till <tt>&dollar;CFLAGS</tt> och <tt>&dollar;LDFLAGS</tt> i
Makefilen:
 <tscreen><verb>
 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
 </verb></tscreen>
Om du använder ett configure-script så kan du ange
<tt>&dollar;CFLAGS</tt> och <tt>&dollar;LDFLAGS</tt> som
skal-variabler (genom att använda env/setenv för csh/tsch eller
set/export för sh/bash osv.) innan du kör configure. Makefilerna som
skapas på detta sätt skall innehålla korrekta <tt>&dollar;CFLAGS</tt>
och <tt>&dollar;LDFLAGS</tt>. Inte alla configure-scripts kommer ta
hänsyn till skal-variablerna, så du bör kolla och editera Makefilen
för hand efter att du kört configure.

Om programmen du kompilerar endast anropar gcc (och inte cpp eller
binutils direkt), så kan du använda följande skal-program för att
slippa ange parametrarna varje gång:
 <tscreen><verb>
 &num;!/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 "&dollar;@"
 </verb></tscreen>
Sedan kan du använda detta skal-program istället för &dquot;gcc&dquot;
när du kompilerar.

<sect1>Kompilera program med libc5 när glibc är primärt bibliotek.
<p>
<nidx>glibc!compiling with alternate library!libc 5</nidx>
För att kompilera ett program med dina gamla bibliotek, när du har
installerat glibc som ditt huvudbibliotek, så måste du ställa om
include-sökvägen till de gamla include-filerna. Att ange
&dquot;-nostdinc&dquot; gör att de normala sökvägarna negeras, och
&dquot;-I/usr/i486-linuxlibc5/include&dquot; pekar på include-filerna
för libc5. Du måste också ange
&dquot;-I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include&dquot; för
att få med de gcc-specifika include-filerna. Kom ihåg att justera
dessa sökvägar i överensstämmelse med namnen på dina nya kataloger och
din gcc-version.

För att länka ett program med ditt gamla libc måste du ange
gcc-setup. Detta gör du med parametern &dquot;-b
i486-linuxlibc5&dquot;.

För de flesta program kan du ange dessa nya alternativ genom att lägga
till dem till <tt>&dollar;CFLAGS</tt> och <tt>&dollar;LDFLAGS</tt> i
Makefilen:
 <tscreen><verb>
 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
 </verb></tscreen>
Om du använder ett configure-script så kan du ange
<tt>&dollar;CFLAGS</tt> och <tt>&dollar;LDFLAGS</tt> som
skal-variabler (genom att använda env/setenv för csh/tsch eller
set/export för sh/bash osv.) innan du kör configure. Makefilerna som
skapas på detta sätt skall innehålla korrekta <tt>&dollar;CFLAGS</tt>
och <tt>&dollar;LDFLAGS</tt>. Inte alla configure-scripts kommer ta
hänsyn till skal-variablerna, så du bör kolla och editera Makefilen
för hand efter att du kört configure.

Om programmen du kompilerar endast anropar gcc (och inte cpp eller
binutils direkt), så kan du använda följande skal-program för att
slippa ange parametrarna varje gång:
 <tscreen><verb>
 &num;!/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 "&dollar;@"
 </verb></tscreen>
Sedan kan du använda detta skalprogram istället för &dquot;gcc&dquot;
när du kompilerar.

<sect>Kompilera C++-program.
<p>
<nidx>glibc!C++ programs, compiling</nidx>

Libg++ använder delar av math-biblioteket, så det länkas till
libm. Eftersom ditt existerande libg++ kommer kompileras med ditt
gamla bibliotek, så måste du kompilera om libg++ med glibc eller
skaffa en binärpaket. Den senaste källkoden för libg++, tillsammans
med en binär länkad med glibc (för x86) hittar du på
<url url="ftp://ftp.yggdrasil.com/private/hjl/">.

<sect1>Installera libg++ för ett test-installerat glibc.
<p>
<nidx>glibc!libg++, installing!as test library</nidx>
Om du har installerat glibc som ett test-bibliotek så måste du
installera filerna till katalogen du installerade glibc i (som
t.ex. <tt>/usr/i486-linuxglibc2</tt> i exemplen i föregående
avsnitt). If du installera från binärpaketet (vilket jag skulle
rekommendera, eftersom jag aldrig har lyckats kompilera libg++ på
detta sätt), så måste du packa upp filerna till en temporär katalog
och flytta alla <tt>usr/lib/</tt>-filer till
<tt>&lt;installerings-katalog&gt;/lib/</tt>-katalogen,
<tt>usr/include/</tt>-filerna till
<tt>&lt;installerings-katalog&gt;/include/</tt>-katalogen (kom ihåg
att radera din <tt>include/g++</tt>-länk först!), och sedan
<tt>usr/bin/</tt>-filerna till
<tt>&lt;installerings-katalog&gt;/bin/</tt>-katalogen.

<sect1>Installera libg++ för glibc som primärt bibliotek.
<p>
<nidx>glibc!libg++, installing!as primary library</nidx>
Om du har installerat glibc som ditt primära bibliotek så måste du
först flytta dina gamla libg++-filer till din gamla libc-katalog, om
du fortfarande vill kunna kompilera g++-program med ditt gamla
libc. Det enklaste sättet att göra detta är att installera en ny kopia
av libg++, kompilerad med libc5 enligt föregående avsnitt, och sedan
installera glibc-versionen på det vanliga sättet.

<sect1>Kompilera C++-program med det icke-primära libc.
<p>
<nidx>glibc!C++ programs, compiling!with non-primary libc</nidx>
Om du försöker kompilera C++-program med ett icke-primärt libc så
måste du inkludera include-katalogen för g++, vilken i exemplen ovan
är <tt>/usr/i486-linuxglibc2/include/g++</tt> (för en
test-installering av glibc2) eller
<tt>/usr/i486-linuxlibc5/include/g++</tt> (för en installering av
glibc2 som primärt bibliotek). Detta kan vanligtvis göras genom att
lägga till <tt>&dollar;CXXFLAGS</tt>-variabeln:
 <tscreen><verb>
 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
 </verb></tscreen>


<sect>Rapportera buggar.
<p>
<nidx>glibc!bugs, reporting</nidx>
Om du tror att biblioteket är buggigt, läs först FAQen. Det kan vara
så att andra har haft samma problem och att det finns någon enkel
lösning. Du bör också läsa avsnittet "Recommended Tools to Install the
GNU C Library" i <tt>INSTALL</tt>-filen, eftersom vissa buggar kan
finnas i verktygen och inte i glibc.

Om du hittat en bugg, så se till att det verkligen är en bugg. Ett bra
sätt att göra detta är att kolla om GNU C-biblioteket uppträder på
samma sätt som andra C-bibliotek. Om det gör det så har du antagligen
fel och biblioteken har antagligen rätt (men inte med
nödvändighet). Om inte så har säkert biblioteken fel. 

Gå sedan till <url url="http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl">
och ta en titt på bugg-databasen. Kolla så att problemet inte redan
har rapporterats. Du bör också titta på filen <tt>BUGS</tt> (vilken
kommer med libc) för att se efter om det är en känd bugg.

Om du är säker på att du hittat en ny bugg, försök avgränsa den till
det minsta möjliga testfallet som producerar detta problem. I
C-bibliotekets fall behöver du bara avgränsa det till ett
biblioteksfunktionsanrop, om det är möjligt. Detta bör inte vara så
svårt.

Det sista steget, när du har ett enkelt testfall är att rapportera
buggen. När du rapporterar en bugg, skicka in testfallet, resultaten
du fått, resultaten du väntade dig, vad du tror felet kan vara (om du
har kommit på något), vilken sorts system du har, versionerna av GNU
C-biblioteket, GNU CC-kompilatorn och GNU Binutils som du
använder. Inkludera också filerna <tt>config.status</tt> och
<tt>config.make</tt>, vilka skapas då du kör <tt>configure</tt>; de
kommer finnas i den katalog du stod i då du körde <tt>configure</tt>. 

Alla buggrapporter för GNU C-biblioteket ska skickas med hjälp av
skalprogrammet <tt/glibcbug/, vilket kommer med GNU libc, till <url
url="bugs@gnu.org"> (den äldre adressen <url
url="bugs@gnu.ai.mit.edu"> fungerar fortfarande), eller skickad genom
webb-gränssnittet GNATS till <url
url="http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl">. 

Förslag och frågor ska skickas till mailinglistan på <url
url="bugs-glibc@prep.ai.mit.edu">. 
If du inte läser nyhetsgruppen gnu.bug.glibc så kan du prenumerera på
listan genom att fråga <url url="bug-glibc-request@prep.ai.mit.edu">.

Var vänlig skicka INTE buggrapporter för GNU C-biblioteket till
&lt;bug-gcc@prep.ai.mit.edu&gt;. Den listan är till för buggrapporter
för GNU CC. GNU CC och GNU C-biblioteket är separata entiteter vilka
utvecklas av olika människor.

<sect>Exempel på specs-fil.<label id="specs">
<p>
<nidx>glibc!GCC specs file, sample</nidx>

Nedan följer ett exempel på en <tt>specs</tt>-fil för glibc2, vilken
används av gcc vid kompilering och länkning. Den bör finnas i
katalogen <tt>/usr/lib/gcc-lib/&lt;ny
system-katalog&gt;/&lt;gcc-version&gt;</tt>. Om du kör ett x86-system
så kan du antagligen kopiera det här avsnittet direkt till filen.

 <tscreen><verb>
 *asm:
 &percnt;{V} &percnt;{v:&percnt;{!V:-V}} &percnt;{Qy:} &percnt;{!Qn:-Qy} &percnt;{n} &percnt;{T} &percnt;{Ym,*} &percnt;{Yd,*} &percnt;{Wa,*:&percnt;*}

 *asm_final:
 &percnt;{pipe:-}

 *cpp:
 &percnt;{fPIC:-D__PIC__ -D__pic__} &percnt;{fpic:-D__PIC__ -D__pic__} &percnt;{!m386:-D__i486__} &percnt;{posix:-D_POSIX_SOURCE} &percnt;{pthread:-D_REENTRANT}

 *cc1:
 &percnt;{profile:-p}

 *cc1plus:


 *endfile:
 &percnt;{!shared:crtend.o&percnt;s} &percnt;{shared:crtendS.o&percnt;s} crtn.o&percnt;s

 *link:
 -m elf_i386 &percnt;{shared:-shared}   &percnt;{!shared:     &percnt;{!ibcs:       &percnt;{!static: 	&percnt;{rdynamic:-export-dynamic} 	&percnt;{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} 	&percnt;{static:-static}}}

 *lib:
 &percnt;{!shared: &percnt;{pthread:-lpthread} 	&percnt;{profile:-lc_p} &percnt;{!profile: -lc}}

 *libgcc:
 -lgcc

 *startfile:
 &percnt;{!shared:      &percnt;{pg:gcrt1.o&percnt;s} &percnt;{!pg:&percnt;{p:gcrt1.o&percnt;s} 		       &percnt;{!p:&percnt;{profile:gcrt1.o&percnt;s} 			 &percnt;{!profile:crt1.o&percnt;s}}}}    crti.o&percnt;s &percnt;{!shared:crtbegin.o&percnt;s} &percnt;{shared:crtbeginS.o&percnt;s}

 *switches_need_spaces:


 *signed_char:
 &percnt;{funsigned-char:-D__CHAR_UNSIGNED__}

 *predefines:
 -D__ELF__ -Dunix -Di386 -Dlinux -Asystem(unix) -Asystem(posix) -Acpu(i386) -Amachine(i386)

 *cross_compile:
 0

 *multilib:
 . ;
 </verb></tscreen>

<sect>Diverse.
<p>
<nidx>glibc!miscellanea</nidx>

<sect1>Vidare information.
<nidx>glibc!information resources</nidx>

<p>

<sect2>Webb-sidor.
<p>
<nidx>glibc!information resources!WWW</nidx>

<itemize>
<item><url url="http://www.gnu.org/software/libc/libc.html" name="FSF's GNU C Library Home Page">
<item><url url="http://www.imaxx.net/~thrytis/glibc/" name="Using GNU Libc 2 with Linux">
<item><url url="http://huizen.dds.nl/~frodol/glibc/"name="Installing glibc-2 on Linux">.
<item><url url="http://www.gate.net/~storm/FAQ/libc5-libc6-Mini-HOWTO.html" name="Debian libc5 to libc6 Mini-HOWTO">.
</itemize>

<sect2>Nyhetsgrupper.
<p>
<nidx>glibc!information resources!newsgroups</nidx>

<itemize>
<item><htmlurl url="news:comp.os.linux.development.system" name="comp.os.linux.development.system">
<item><htmlurl url="news:comp.os.linux.development.apps" name="comp.os.linux.development.apps">
<item><htmlurl url="news:linux.dev.kernel" name="linux.dev.kernel">
<item><htmlurl url="news:gnu.bug.glibc" name="gnu.bugs.glibc">
</itemize>

<sect2>Mailinglistor.
<p>
<nidx>glibc!information resources!mailing lists</nidx>

<descrip>
<tag/Glibc 2 Linux discussion list./
Denna lista är avsett för diskussion mellan Linux-användare som
installerat glibc2, det nya GNU C-biblioteket. Ämnena kan t.ex. vara
kompatibilitesproblem och frågor om kompilering av kod i en
Linux/glibc-miljö.
För att prenumerera, skicka ett ebrev till <url
url="mailto:Majordomo@ricardo.ecn.wfu.edu"
name="Majordomo@ricardo.ecn.wfu.edu"> med "subscribe glibc-linux
&lt;din epostadress&gt; i själva meddelandet.
</descrip>

<sect1>Tillkännagivanden.
<p>

Det mesta av denna information är stulen från 
<url url="http://www.gnu.org/software/libc/libc.html" name="GNU Libc web page">
och från Ulrich Dreppers &lt;drepper@gnu.ai.mit.edu&gt;
glibc2-kungörelse och hans kommentarer. Andreas Jaeger
&lt;aj@arthur.rhein-neckar.de&gt; bidrog med delar av avsnittet om att
rapportera buggar.

Följande människor har bidragit med information och respons på detta
dokument:
<itemize>
<item>Allex &lt;allex@ms2.accmail.com.tw&gt;
<item>Mark Brown &lt;M.A.Brown-4@sms.ed.ac.uk&gt;
<item>Ulrich Drepper &lt;drepper@gnu.ai.mit.edu&gt;
<item>Scott K. Ellis &lt;ellis@valueweb.net&gt;
<item>Aron Griffis &lt;agriffis@coat.com&gt;
<item>Andreas Jaeger &lt;aj@arthur.rhein-neckar.de&gt;
<item>Frodo Looijaard &lt;frodol@dds.nl&gt;
<item>Ryan McGuire &lt;rmcguire@freenet.columbus.oh.us&gt;
<item>Shaya Potter &lt;spotter@capaccess.org&gt;
<item>Les Schaffer &lt;godzilla@futuris.net&gt;
<item>Andy Sewell &lt;puck@pookhill.demon.co.uk&gt;
<item>Gary Shea &lt;shea@gtsdesign.com&gt;
<item>Stephane &lt;sr@adb.fr&gt;
<item>Jan Vandenbos &lt;jan@imaxx.net&gt;
</itemize>

Översättningar av detta dokument utförs av:

<itemize>
<item>Kinesiska: Allex &lt;allex@ms2.accmail.com.tw&gt;
<item>Franska:  Olivier Tharan &lt;tharan@int-evry.fr&gt;
<item>Japanska:  Kazuyuki Okamoto &lt;ikko-@pacific.rim.or.jp&gt;
</itemize>


<sect1>Respons.
<p>

Förutom att jag skrivit denna HOWTO, håller i webb-sidan
<url url="http://www.imaxx.net/~thrytis/glibc" name="glibc 2 for Linux">
och använder glibc på min maskin, så har jag inget att göra med
glibc-projektet. Jag är långt ifrån kunnig på området, men jag brukar
försöka hjälpa till då folk skicka mig ebrev med frågor. Jag välkomnar
alla former av respons, rättelser eller förslag som du har att
erbjuda. Skicka dem till
<url url="mailto:ejg3@cornell.edu" name="ejg3@cornell.edu">.

<sect1>Upphovsrätt.
<P>
Copyright (c) 1997 by Eric Green.  This document may be distributed under
the terms set forth in the LDP license.

</article>
