Nuestro clúster de cómputo ejecuta una versión muy antigua de CentOS, con un Kernel antiguo (2.6.18) y, por supuesto, libs y binarios antiguos. Debido a que actualizar todo requiere mucho trabajo en todos los nodos, esta no es una opción.
Estoy tratando de compilar y usar un programa que requiera C++11
y, por lo tanto, versiones más nuevas de gcc
(y / o clang
). Como no quiero perder el tiempo con el sistema, quiero hacerlo como usuario no root en algún árbol de directorios local.
El problema es que gcc
requiere una versión glibc
más nueva que la que está presente en la (s) máquina (s). Por lo tanto, necesito mantener una versión más nueva y separada de glibc
mi lib/
árbol local , probablemente como se describe aquí .
Donde estoy perdido es, ¿cómo "codifico" las rutas de mis bibliotecas locales en todos los archivos binarios requeridos, es decir gcc
, g++
etc.? Establecer LD_LIBRARY_PATH en mi lib/
árbol local hace que todos los binarios del sistema ya no funcionen ( ELF file OS ABI invalid
) porque quieren usar mi nuevo libm.so
/ libc.so
contra el cual no han sido compilados.
Entonces, para concluir: ¿Cuál es la forma correcta de mantener una pila de desarrollo local más nueva (que contiene glibc
, gcc
etc.) en paralelo a un sistema antiguo sin perder el tiempo como root?
Como pregunta adicional: la configuración LD_LIBRARY_PATH se publica como una solución en todo SE cuando se trata de separar glibc
. Para mí, causa los errores anteriores cuando intento ejecutar cualquier sistema binario (como ls
). ¿Cómo? ¿Hice algo mal o este es el comportamiento previsto?
fuente
-rpath
(-Wl,rpath
) al enlazador, el enlazador también agregará las rutas de laLD_RUN_PATH
variable de entorno a la ruta de búsqueda