Detalhes acerca desse pacote estão localizados na Seção 8.5.3, “Conteúdo do Glibc.”
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.
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
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.38-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=4.14 \ --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=4.14
Isso diz para a Glibc para compilar a biblioteca com suporte para núcleos Linux 4.14 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.
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:
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 na 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
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
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.
Detalhes acerca desse pacote estão localizados na Seção 8.5.3, “Conteúdo do Glibc.”