En Debian (64 bits), ¿cómo instalo glibc que compilé desde el código fuente?

En Debian (64 bits), ¿cómo instalo glibc que compilé desde el código fuente?

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.2in /lib64pero cuando se cargaba un programa encontraba la versión anterior de libc.so.6in /lib/x86_64-linux-gnuen lugar de la nueva versión de /lib64. (¿Aparentemente ld y libc tienen que coincidir?)

Intenté ponerlo /lib64en la parte superior /etc/ld.so.conf.d/x86_64-linux-gnu.confy 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:

  1. Hice una copia de seguridad del contenido de /lib, /lib32y /lib64.

  2. Edité /etc/ld.so.conf.d/x86_64-linux-gnu.confpara colocarlo /lib64en la parte superior de las rutas de búsqueda.

  3. Configuré la nueva versión de glibc (2.19) con opciones --prefix=/usr --enable-kernel=2.6.26para que coincida con la versión anterior de glibc (2.13).

  4. Construí el nuevo glibc. Esto transcurrió sin incidentes.

  5. Solía su​​obtener privilegios de root y ejecutaba make install. Comenzó a instalarse, luego se produjo un error de segmentación después de que ld-linux-x86-64.so.2se instaló el nuevo y todavía estaba recogiendo el antiguo libc.so.6.

  6. Para solucionar este problema, ejecuté ldconfig(aún como root, por supuesto).

  7. Reinicié la instalación ( make install). Se produjo un error nuevamente en algún comando que invocaba gcc. Descubrí que esto se debía a que los encabezados no coincidían: la nueva /usr/include/stdio.hestaba recogiendo la /usr/include/x86_64-linux-gnu/sys/cdefs.hversión antigua en lugar de la nueva en /usr/include/sys/cdefs.h.

  8. Entonces, para solucionar este problema, eliminé el directorio /usr/include/x86_64-linux-gnu/sysy lo reemplacé con un enlace simbólico a /usr/include/sys. También reemplacé los encabezados a.out.h, fpu_control.hy ieee754.hcon /usr/include/x86_64-linux-gnuenlaces simbólicos a sus nuevas versiones en /usr/include.

  9. 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.

información relacionada