Nästa Föregående Innehållsförteckning

5. Installera som primärt C-bibliotek.

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.

5.1 Bygga biblioteket från källkod.

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.

Förutsättningar.

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.

Packa upp källkoden.

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:

 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
 
Detta placerar linuxthreads-, crypt- och localedata-kataloger i katalogen glibc-2.0.6, där configure kan hitta dessa tillägg.

Konfigurering.

Skapa en katalog som heter compile i glibc-2.0.6-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.)

mkdir compile
cd compile
Kör ../configure. 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 /usr vet configure om att den ska ändra sina sökvägar för att placera libc.so och andra viktiga bibliotek i /lib.) Hela configure-raden blir alltså:
 ../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr

Kompilera.

För att kompilera och verifiera, kör:

 make
 make check
 

5.2 Förberedelser inför installeringen.

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.

  1. Skapa en ny katalog att stoppa de gamla filerna i:
     mkdir -p /usr/i486-linuxlibc5/lib
     
    
  2. De gamla header-filerna måste evakueras från /usr/include:
     mv /usr/include /usr/i486-linuxlibc5/include
     
    
  3. Skapa en ny include-katalog och skapa länkar till andra include-kataloger:
     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++
     
    
    Länkarna kan behöva en del modifikationer, beroende på vilken distribution du använder. Åtminstone Slackware stoppar g++-header-filer i /usr/local/g++-include, medan Debian stoppar header-filerna i /usr/include/g++ och länkar /usr/lib/g++-include till /usr/include/g++. I det senare fallet gör du nog bäst i att flytta tillbaks den ursprungliga g++-include-katalogen till /usr/include.
  4. Återställ alla extra header-filer och länkar. Vissa tilläggsbibliotek, som ncurses, stoppar filer i /usr/include eller stoppar en länk till sina include-kataloger i /usr/include. Dessa filer och länkar måste återställas för att du ska kunna använda dessa bibliotek.
  5. Lägg till din nya bibliotekskatalog (som /usr/i486-linuxlibc5/lib) längst upp i din /etc/ld.so.conf-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.
  6. Flytta/kopiera all de gamla C-biblioteken till den nya katalogen.
     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
     
    
    libm.so.5 och libc.so.5 bör kopieras snarare än flyttas om /usr finns på en annan partition än /, eftersom de behövs av programmen som används för att starta Linux och måste finnas på root-partitionen.
  7. Flytta /usr/lib/*.o-filerna till den nya katalogen.
     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
     
    
  8. Uppdatera din biblioteks-cache efter att biblioteken flyttats.
     ldconfig -v
     
    

5.3 Installering från binärpaket.

Om du installerar glibc från förkompilerade binärer måste du:

 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
 
Om du har en annan arkitektur eller version så ska du naturligtvis byta ut filnamnen.

5.4 Installera från källkod.

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

 make install
 ldconfig -v
 

5.5 Uppdatera gcc-specs.

Det sista steget i installeringen (för båda binär- och källkods-installering) är att uppdatera gccs specs-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:

 % gcc -v
 reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
 gcc version 2.7.2.2
 

I det här fallet är systemet i486-unknown-linux och 2.7.2.2 är versionen. Du ska kopiera /usr/lib/gcc-lib/<system> till den gamla system-katalogen:

 cd /usr/lib/gcc-lib/
 cp -r i486-unknown-linux i486-linuxlibc5
 

Gå till den ursprungliga katalogen katalogens versionskatalog:

 cd /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2
 

och editera filen specs som finns där. I denna fil ska du byta ut /lib/ld-linux.so.1 till /lib/ld-linux.so.2. Du måste också ta bort alla %{...:-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 Exempel på specs-fil.

5.6 Testa din installering.

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

 #include <stdio.h>

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


Nästa Föregående Innehållsförteckning