No Debian (64 bits), como instalo o glibc que construí a partir do código-fonte?

No Debian (64 bits), como instalo o glibc que construí a partir do código-fonte?

Quando tentei fazer isso, meu sistema quebrou, com todos os programas falhando imediatamente. Acredito que seja porque ele instalou uma nova versão do ld-linux-x86-64.so.2in, /lib64mas quando um programa era carregado, ele encontrava a versão antiga do libc.so.6in /lib/x86_64-linux-gnuem vez da nova versão do /lib64. (Aparentemente, ld e libc precisam corresponder?)

Tentei colocar /lib64no topo /etc/ld.so.conf.d/x86_64-linux-gnu.confe depois executar ldconfig. No entanto, por algum motivo, isso não resolveu nada.

Responder1

Enquanto procurava por algo não relacionado, descobri por acaso por que minha instalação estava selecionando a antiga libc: porque a nova libc tinha uma versão mais antiga da ABI (https://stackoverflow.com/questions/20577638/library-path-order-for-alternate-glibc-dynamic-linker-ld-so).

Então foi isso que eu fiz:

  1. Eu fiz backup do conteúdo de /lib, /lib32e /lib64.

  2. Editei /etc/ld.so.conf.d/x86_64-linux-gnu.confpara colocar /lib64no topo dos caminhos de pesquisa.

  3. Configurei a nova versão da glibc (2.19) com opções --prefix=/usr --enable-kernel=2.6.26para corresponder à versão antiga da glibc (2.13).

  4. Eu construí o novo glibc. Isso foi tranquilo.

  5. Eu costumava suobter privilégios de root e executei o make install. Ele começou a instalar, depois falhou depois que o novo ld-linux-x86-64.so.2foi instalado e ainda estava pegando o antigo libc.so.6.

  6. Para corrigir isso, executei ldconfig(ainda como root, é claro).

  7. Reiniciei a instalação ( make install). Ocorreu um erro novamente em algum comando que invocou o gcc. Descobri que isso acontecia por causa de cabeçalhos incompatíveis: o novo /usr/include/stdio.hestava pegando a /usr/include/x86_64-linux-gnu/sys/cdefs.hversão antiga em vez da nova em /usr/include/sys/cdefs.h.

  8. Então, para corrigir isso, removi o diretório /usr/include/x86_64-linux-gnu/syse substituí-o por um link simbólico para /usr/include/sys. Também substituí os cabeçalhos a.out.h, fpu_control.he ieee754.hin /usr/include/x86_64-linux-gnupor links simbólicos para suas novas versões em /usr/include.

  9. Reiniciei a instalação novamente ( make install). Finalmente conseguiu.

Depois de reiniciar meu sistema, tudo estava funcionando perfeitamente.

Ainda não descobri o que acontece se eu tentar atualizar também a versão de 32 bits da libc instalada junto com a versão de 64 bits no meu sistema. Suspeito que isso quebrará tudo horrivelmente novamente. Atualizarei esta resposta se tiver sucesso.

informação relacionada