¿Siempre hay varias versiones de cierto archivo libXXX.so.x que coexisten para una determinada versión de la biblioteca Glibc?

El ‘so’ en el nombre significa ‘objeto compartido’, y el ld (enlazador dinámico) en el sistema está configurado para buscar objetos compartidos en una ubicación específica en tiempo de ejecución. Cuando utiliza una ‘cadena de herramientas’ (una combinación de binutils / gcc / libc), la versión de libc (glibc 6 en este ejemplo) objeto compartido creado contendrá símbolos para todas las versiones anteriores de libc … bueno, un cierto rango, todo dependiendo de qué libc se use en la cadena de herramientas.

El ldd (Lista de dependencias dinámicas) que está utilizando dice “No veo 2.15 libc con el que se compiló esta versión de ‘Assembler’ en este objeto compartido libc (.so.6) que encontré en mi ruta de objeto compartido”. Sin embargo, encontró muchos símbolos de versiones anteriores de libc.
El libc es un objeto compartido bastante especial que el objeto compartido creado contendrá versiones anteriores de símbolos, principalmente para la compatibilidad con el tiempo de ejecución del enlace hacia atrás. Pero solo podrá decirle a ld (enlazador de tiempo de ejecución) un objeto compartido para usar a la vez para cargar símbolos libc de binarios dependientes.

Vuelva a compilar una libc más nueva utilizando las versiones gcc y binutils utilizadas por el sistema. Deberá incluir las mismas versiones que ve. Puede decirle al vinculador que use una ruta de tiempo de ejecución diferente para buscar objetos compartidos, y use un vinculador diferente, pero generalmente no desea que sea temporal para un binario, ya que todo el núcleo se basa en poder encontrar los símbolos que se compiló. con en el sistema libc objeto compartido.
Muchas veces la gente ya habrá creado un paquete para una nueva libc para varios sistemas operativos, que podría contener la versión con la que ya se creó este ensamblador.
Alternativamente, el binario Assembler podría no necesitar ningún símbolo 2.15 más nuevo para construir / ejecutar, y podría recompilar el ensamblador usando la libc en el sistema en el que se encuentra (obviamente, la libc utilizada era diferente a la que tiene en el sistema).