%2C%20%C2%BFc%C3%B3mo%20instalo%20glibc%20que%20compil%C3%A9%20desde%20el%20c%C3%B3digo%20fuente%3F.png)
Cuando intenté hacer esto, mi sistema falló y todos los programas fallaron inmediatamente. Creo que es porque instaló una nueva versión de ld-linux-x86-64.so.2
in /lib64
pero cuando se cargaba un programa encontraba la versión anterior de libc.so.6
in /lib/x86_64-linux-gnu
en lugar de la nueva versión de /lib64
. (¿Aparentemente ld y libc tienen que coincidir?)
Intenté ponerlo /lib64
en la parte superior /etc/ld.so.conf.d/x86_64-linux-gnu.conf
y luego ejecutarlo ldconfig
. Sin embargo, por alguna razón esto no solucionó nada.
Respuesta1
Mientras buscaba algo no relacionado, descubrí fortuitamente por qué mi instalación estaba retomando la antigua libc: porque la nueva libc tenía una versión ABI anterior (https://stackoverflow.com/questions/20577638/library-path-order-for-alternate-glibc-dynamic-linker-ld-so).
Entonces esto es lo que hice:
Hice una copia de seguridad del contenido de
/lib
,/lib32
y/lib64
.Edité
/etc/ld.so.conf.d/x86_64-linux-gnu.conf
para colocarlo/lib64
en la parte superior de las rutas de búsqueda.Configuré la nueva versión de glibc (2.19) con opciones
--prefix=/usr --enable-kernel=2.6.26
para que coincida con la versión anterior de glibc (2.13).Construí el nuevo glibc. Esto transcurrió sin incidentes.
Solía
su
obtener privilegios de root y ejecutabamake install
. Comenzó a instalarse, luego se produjo un error de segmentación después de queld-linux-x86-64.so.2
se instaló el nuevo y todavía estaba recogiendo el antiguolibc.so.6
.Para solucionar este problema, ejecuté
ldconfig
(aún como root, por supuesto).Reinicié la instalación (
make install
). Se produjo un error nuevamente en algún comando que invocabagcc
. Descubrí que esto se debía a que los encabezados no coincidían: la nueva/usr/include/stdio.h
estaba recogiendo la/usr/include/x86_64-linux-gnu/sys/cdefs.h
versión antigua en lugar de la nueva en/usr/include/sys/cdefs.h
.Entonces, para solucionar este problema, eliminé el directorio
/usr/include/x86_64-linux-gnu/sys
y lo reemplacé con un enlace simbólico a/usr/include/sys
. También reemplacé los encabezadosa.out.h
,fpu_control.h
yieee754.h
con/usr/include/x86_64-linux-gnu
enlaces simbólicos a sus nuevas versiones en/usr/include
.Reinicié la instalación nuevamente (
make install
). Finalmente lo logró.
Después de reiniciar mi sistema, todo estaba en perfecto estado de funcionamiento.
Todavía no he descubierto qué sucede si intento actualizar también la versión de 32 bits de libc instalada junto con la versión de 64 bits en mi sistema. Sospecho que volverá a romper todo horriblemente. Actualizaré esta respuesta si tengo éxito.