No Debian (64 bits), como instalo o glibc que construí da origem?

1

Quando tentei fazer isso, meu sistema quebrou, com cada programa sendo imediatamente segmentado. Acredito que seja porque instalou uma nova versão de ld-linux-x86-64.so.2 in /lib64 , mas quando um programa foi carregado, ele encontraria a versão antiga de libc.so.6 in /lib/x86_64-linux-gnu em vez da nova versão em /lib64 . (Aparentemente ld e libc tem que combinar?)

Eu tentei colocar /lib64 no topo de /etc/ld.so.conf.d/x86_64-linux-gnu.conf e, em seguida, executar ldconfig . No entanto, por algum motivo, isso não resolveu nada.

    
por Brian Bi 15.06.2014 / 17:39

1 resposta

2

Enquanto procurava por algo não relacionado, descobri por que minha instalação estava pegando a antiga libc: porque a nova libc tinha uma versão antiga da ABI ( link ).

Então, foi o que eu fiz:

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

  2. Eu editei /etc/ld.so.conf.d/x86_64-linux-gnu.conf para colocar /lib64 no topo dos caminhos de pesquisa.

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

  4. Eu construí o novo glibc. Isso foi sem complicações.

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

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

  7. Eu reiniciei a instalação ( make install ). Ele errou novamente em algum comando que chamou gcc . Descobri que isso era devido a cabeçalhos incompatíveis: o novo /usr/include/stdio.h estava escolhendo o antigo /usr/include/x86_64-linux-gnu/sys/cdefs.h em vez da nova versão em /usr/include/sys/cdefs.h .

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

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

Depois que reiniciei meu sistema, tudo estava em perfeito funcionamento.

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 do meu sistema. Eu suspeito que vai quebrar tudo de novo horrivelmente. Vai atualizar esta resposta se eu tiver sucesso.

    
por 15.06.2014 / 23:49

Tags