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.2
in, /lib64
mas quando um programa era carregado, ele encontrava a versão antiga do libc.so.6
in /lib/x86_64-linux-gnu
em vez da nova versão do /lib64
. (Aparentemente, ld e libc precisam corresponder?)
Tentei colocar /lib64
no topo /etc/ld.so.conf.d/x86_64-linux-gnu.conf
e 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:
Eu fiz backup do conteúdo de
/lib
,/lib32
e/lib64
.Editei
/etc/ld.so.conf.d/x86_64-linux-gnu.conf
para colocar/lib64
no topo dos caminhos de pesquisa.Configurei a nova versão da glibc (2.19) com opções
--prefix=/usr --enable-kernel=2.6.26
para corresponder à versão antiga da glibc (2.13).Eu construí o novo glibc. Isso foi tranquilo.
Eu costumava
su
obter privilégios de root e executei omake install
. Ele começou a instalar, depois falhou depois que o novold-linux-x86-64.so.2
foi instalado e ainda estava pegando o antigolibc.so.6
.Para corrigir isso, executei
ldconfig
(ainda como root, é claro).Reiniciei a instalação (
make install
). Ocorreu um erro novamente em algum comando que invocou ogcc
. Descobri que isso acontecia por causa de cabeçalhos incompatíveis: o novo/usr/include/stdio.h
estava pegando a/usr/include/x86_64-linux-gnu/sys/cdefs.h
versão antiga em vez da nova em/usr/include/sys/cdefs.h
.Então, para corrigir isso, removi o diretório
/usr/include/x86_64-linux-gnu/sys
e substituí-o por um link simbólico para/usr/include/sys
. Também substituí os cabeçalhosa.out.h
,fpu_control.h
eieee754.h
in/usr/include/x86_64-linux-gnu
por links simbólicos para suas novas versões em/usr/include
.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.