5.5. Glibc-2.36

Glibc pakken inneholder C hovedbiblioteket. Dette biblioteket tilbyr de grunnleggende rutinene for tildeling av minne, søk i kataloger, åpne og lukke filer, lese og skrive filer, strenghåndtering, mønstertilpasning, aritmetikk og så videre.

Omtrentlig byggetid: 4.4 SBU
Nødvendig diskplass: 821 MB

5.5.1. Installasjon av Glibc

Først oppretter du en symbolsk lenke for LSB kompalitet. I tillegg, for x86_64 oppretter du en symbolsk kompatibilitetskobling som kreves for korrekt operasjon av den dynamiske biblioteklasteren:

case $(uname -m) in
    i?86)   ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
    ;;
    x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
            ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3
    ;;
esac
[Note]

Note

Kommandoen ovenfor er riktig. The ln kommandoen har noen få syntaktiske versjoner, så sørg for å sjekke info coreutils ln og ln(1) før du rapporterer det du kanskje tror er en feil.

Noen av Glibc-programmene bruker FHS inkompatible /var/db mappen for å lagre deres kjøretidsdata. Bruk følgende oppdatering for å få slike programmer til å lagre sine kjøretidsdata på de FHS kompatible stedene:

patch -Np1 -i ../glibc-2.36-fhs-1.patch

Glibc dokumentasjonen anbefaler å bygge Glibc i en dedikert byggemappe:

mkdir -v build
cd       build

Sørg for at ldconfig og sln verktøy er installert i /usr/sbin:

echo "rootsbindir=/usr/sbin" > configparms

Deretter forbereder du Glibc for kompilering:

../configure                             \
      --prefix=/usr                      \
      --host=$LFS_TGT                    \
      --build=$(../scripts/config.guess) \
      --enable-kernel=3.2                \
      --with-headers=$LFS/usr/include    \
      libc_cv_slibdir=/usr/lib

Betydningen av konfigureringsalternativene:

--host=$LFS_TGT, --build=$(../scripts/config.guess)

Den kombinerte effekten av disse bryterne er at Glibcs byggesystem konfigurerer seg selv til å være krysskompilert, ved hjelp av krysskoblingen og krysskompilator i $LFS/tools.

--enable-kernel=3.2

Dette forteller Glibc å kompilere biblioteket med støtte til 3.2 og senere Linux kjerner. Løsninger for eldre kjerner er ikke aktivert.

--with-headers=$LFS/usr/include

Dette forteller Glibc å kompilere seg selv mot deklarasjonene nylig installert i mappen $LFS/usr/include, slik at den vet nøyaktig hvilke funksjoner kjernen har og kan optimalisere seg selv deretter.

libc_cv_slibdir=/usr/lib

Dette sikrer at biblioteket er installert i /usr/lib i stedet for standard /lib64 på 64-bits maskiner.

I løpet av dette stadiet kan følgende advarsel vises:

configure: WARNING:
*** These auxiliary programs are missing or
*** incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.

Den manglende eller inkompatible msgfmt programmet er generelt ufarlig. Dette msgfmt programmet er en del av Gettext pakken som vertsdistribusjonen skal gi.

[Note]

Note

Det har vært rapporter om at denne pakken kan mislykkes når bygning som et "parallell make". Hvis dette skjer, kjør make kommandoen på nytt med et "-j1"-alternativ.

Compile the package:

make

Installer pakken:

[Warning]

Warning

Hvis LFS ikke er riktig innstilt, og til tross for anbefalinger, bygger du som root, neste kommando vil installer den nybygde glibc til vertssystemet ditt, som mest sannsynlig vil gjøre det ubrukelig. Så dobbeltsjekk at miljøet er riktig innstilt før du kjører følgende kommando.

make DESTDIR=$LFS install

Betydningen av make install alternativene:

DESTDIR=$LFS

The DESTDIR make variabelen brukes av nesten alle pakker for å definere plasseringen der pakken skal være installert. Hvis den ikke er angitt, er den standard til rot (/) mappen. Her spesifiserer vi at pakken installeres i $LFS , som vil bli roten etter Section 7.4, “Gå inn i Chroot miljøet”.

Fiks hardkodet bane til den kjørbare lasteren i ldd script:

sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd
[Caution]

Caution

På dette tidspunktet er det viktig å stoppe og sikre at de grunnleggende funksjoner (kompilering og lenker) til den nye verktøykjeden fungerer som forventet. For å utføre en tilregnelighetssjekk, kjør følgende kommandoer:

echo 'int main(){}' | gcc -xc -
readelf -l a.out | grep ld-linux

Hvis alt fungerer som det skal, skal det ikke være noen feil, og utdata fra den siste kommandoen vil være av formen:

[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

Merk at for 32-bits maskiner vil fortolkenavnet være /lib/ld-linux.so.2.

Hvis utdataen ikke vises som ovenfor eller det ikke var noen utdata i det hele tatt, da er det noe galt. Undersøk og følg trinnene for å finne ut hvor problemet er og korriger det. Dette problemet må løses før fortsetter.

Når alt er bra, rydd opp i testfilene:

rm -v a.out
[Note]

Note

Byggepakker i neste kapittel vil fungere som en ekstra sjekk at verktøykjeden er riktig bygget. Hvis noen pakken, spesielt binutils-pass2 eller gcc-pass2, klarer ikke å bygge, er det en indikasjon på at noe har gått galt med tidligere Binutils-, GCC- eller Glibc-installasjoner.

Nå som vår kryssverktøykjede er fullført, fullfør installasjonen limits.h deklarasjoner. For å gjøre det, kjør et verktøy levert av GCC utviklere:

$LFS/tools/libexec/gcc/$LFS_TGT/12.2.0/install-tools/mkheaders

Detaljer om denne pakken finner du i Section 8.5.3, “Innhold i Glibc.”