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:
-
Eu fiz backup do conteúdo de
/lib
,/lib32
e/lib64
. -
Eu editei
/etc/ld.so.conf.d/x86_64-linux-gnu.conf
para colocar/lib64
no topo dos caminhos de pesquisa. -
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). -
Eu construí o novo glibc. Isso foi sem complicações.
-
Eu usei
su
para obter privilégios de root e executeimake install
. Ele começou a instalar, depois se separou depois que o novold-linux-x86-64.so.2
foi instalado e ainda estava pegando o antigolibc.so.6
. -
Para corrigir isso, eu corri
ldconfig
(ainda como root, é claro). -
Eu reiniciei a instalação (
make install
). Ele errou novamente em algum comando que chamougcc
. 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
. -
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çalhosa.out.h
,fpu_control.h
eieee754.h
in/usr/include/x86_64-linux-gnu
por links simbólicos para as novas versões em/usr/include
. -
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.