5.5. Glibc-2.37

O pacote Glibc contém a principal biblioteca C. Essa biblioteca fornece as rotinas básicas para alocação de memória, busca em diretórios, abertura e fechamento de arquivos, leitura e escrita de arquivos, manuseio de sequências de caracteres, correspondência de padrões, aritmética, e daí por diante.

Tempo aproximado de construção: 1.5 SBU
Espaço em disco exigido: 822 MB

5.5.1. Instalação da Glibc

Primeiro, crie um link simbólico para conformidade com a LSB. Adicionalmente, para x86_64, crie um link simbólico de compatibilidade exigido para a operação adequada do carregador dinâmico de biblioteca:

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
[Nota]

Nota

O comando acima está correto. O comando ln tem várias versões sintáticas, de forma que tenha certeza de verificar info coreutils ln e ln(1) antes de relatar o que possivelmente aparente ser um erro.

Alguns dos aplicativos Glibc usam o diretório não conforme com a FHS /var/db para armazenar os dados em tempo de execução deles. Aplique o seguinte remendo para fazer com que tais aplicativos armazenem os dados em tempo de execução deles nos locais conformes com a FHS:

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

A documentação da Glibc recomenda construir a Glibc em um diretório dedicado à construção:

mkdir -v build
cd       build

Assegure que os utilitários ldconfig e sln sejam instalados em /usr/sbin:

echo "rootsbindir=/usr/sbin" > configparms

A seguir, prepare a Glibc para compilação:

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

O significado das opções do configure:

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

O efeito combinado dessas chaves é o de que o sistema de construção da Glibc se autoconfigura para ser compilado cruzadamente, usando o vinculador cruzado e o compilador cruzado em $LFS/tools.

--enable-kernel=3.2

Isso diz para a Glibc para compilar a biblioteca com suporte para núcleos Linux 3.2 e posteriores. Contornos para núcleos mais antigos não estão habilitados.

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

Isso diz para a Glibc para compilar a si mesma contra os cabeçalhos recentemente instalados no diretório $LFS/usr/include, de forma que ela saiba exatamente quais recursos o núcleo tem e possa otimizar-se adequadamente.

libc_cv_slibdir=/usr/lib

Isso garante que a biblioteca seja instalada em /usr/lib em vez do padrão /lib64 em máquinas de 64 bits.

Durante este estágio o seguinte aviso pode aparecer:

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

O ausente ou incompatível aplicativo msgfmt geralmente é inofensivo. Esse aplicativo msgfmt é parte do pacote Gettext, que a distribuição anfitriã deveria fornecer.

[Nota]

Nota

Tem havido relatos de que esse pacote possivelmente falhe quando da construção como um "make paralelo". Se isso ocorrer, [então] reexecute o comando make com a opção "-j1".

Compile o pacote:

make

Instale o pacote:

[Atenção]

Atenção

Se LFS não estiver adequadamente configurada, e a despeito das recomendações, você estiver construindo como root, [então] o próximo comando instalará a recém construída Glibc em seu sistema anfitrião, o que quase certamente o tornará inutilizável. Portanto, verifique duas vezes se o ambiente está corretamente configurado e que você não é o(a) root antes de executar o seguinte comando.

make DESTDIR=$LFS install

O significado da opção make install:

DESTDIR=$LFS

A variável DESTDIR de make é usada por quase todos os pacotes para definir o local onde o pacote deveria ser instalado. Se ela não estiver configurada, [então] o padrão é o diretório raiz (/). Aqui nós especificamos que o pacote seja instalado em $LFS, que se tornará o diretório raiz no Seção 7.4, “Entrando no Ambiente Chroot”.

Corrija caminho codificado rigidamente para o carregador de executável no script ldd:

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

Cuidado

Neste ponto, é imperativo parar e certificar-se de que as funções básicas (compilar e lincar) do novo conjunto de ferramentas estão funcionando como esperado. Para realizar uma verificação de sanidade, execute os seguintes comandos:

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

Se tudo estiver funcionando corretamente, [então] não deveriam existir quaisquer erros e a saída do comando final será na forma:

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

Observe que, para máquinas de 32 bits, o nome do interpretador será /lib/ld-linux.so.2.

Se a saída gerada não for mostrada como acima ou não existir saída gerada nenhuma, então alguma coisa está errada. Investigue e refaça os passos para descobrir onde está o problema e corrija-o. Esse problema precisa ser resolvido antes de continuar.

Uma vez que tudo esteja bem, limpe o arquivo de teste:

rm -v a.out
[Nota]

Nota

Construir os pacotes no próximo capítulo servirá como uma verificação adicional de que o conjunto de ferramentas foi construído adequadamente. Se algum pacote, especialmente o Binutils-passagem 2 ou o GCC-passagem 2, falhar na construção, [então] isso é uma indicação de que alguma coisa deu errado com as instalações anteriores doe Binutils, GCC ou da Glibc.

Agora que nosso conjunto de ferramentas cruzado está completo, finalize a instalação do cabeçalho limits.h. Para fazer isso, execute um utilitário fornecido pelas(os) desenvolvedoras(os) do GCC:

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

Detalhes acerca desse pacote estão localizados em Seção 8.5.3, “Conteúdo do Glibc.”