Tiene la razón porque glibc usa el control de versiones de los símbolos. Si tiene curiosidad, la implementación de versiones de símbolo introducida en glibc 2.1 se describe here y es una extensión del esquema de control de versiones de símbolos de Sun descrito here.
Una opción es vincular estáticamente su binario. Esta es probablemente la opción más fácil.
También puede crear su binario en un entorno de construcción chroot, o usando una nueva glibc- => glibc- edad compilador cruzado.
acuerdo con el puesto http://www.trevorpounds.com el blog Linking to Older Versioned Symbols (glibc), es posible forzar a cualquier símbolo se enlacen con una más antigua, siempre que es válido utilizando el mismo .symver
pseudo-op que se utiliza para definir versionado símbolos en primer lugar. El siguiente ejemplo se extrajo del blog post.
El ejemplo siguiente hace uso de la ruta real de glibc, pero se asegura de que esté vinculado a una versión anterior de 2.2.5.
#include <limits.h>
#include <stdlib.h>
#include <stdio.h>
__asm__(".symver realpath,[email protected]_2.2.5");
int main()
{
char* unresolved = "/lib64";
char resolved[PATH_MAX+1];
if(!realpath(unresolved, resolved))
{ return 1; }
printf("%s\n", resolved);
return 0;
}
Argh este es uno de esos problemas realmente molestos de Linux como que la solución siempre es "no deberías hacer eso", lo que por supuesto significa "no funciona y nadie lo ha arreglado todavía". – Timmmm
La gente se quejaba del DLL hell en Windows. Recuerdo que * algunos * aficionados de Linux intentaron mencionarlo como un ejemplo particularmente horrible del mundo de Windows. Cuando me topé con * esto * haciendo desarrollo de Linux hace más de una década, todo lo que hice fue enterrar mi cara en mis manos. – 0xC0000022L