Casi ningún comando funciona: error de reubicación: símbolo __getrlimit, versión GLIBC_PRIVATE no definida en libc.so.6

Casi ningún comando funciona: error de reubicación: símbolo __getrlimit, versión GLIBC_PRIVATE no definida en libc.so.6

Estoy conectado con SSH a una máquina en la que no tengo acceso de root. Para instalar algo, cargué bibliotecas desde mi máquina y las puse en el ~/libdirectorio del host remoto.

Ahora, para casi cualquier comando que ejecuto, aparece el siguiente error (el ejemplo es para ls) o un Segmentation fault (core dumped)mensaje.

ls: relocation error: /lib/libpthread.so.0: symbol __getrlimit, version 
GLIBC_PRIVATE not defined in file libc.so.6 with link time reference

Los únicos comandos que he ejecutado con éxito son cdy pwdhasta ahora. Prácticamente puedo encontrar archivos en un directorio usando TAB para autocompletar ls, de modo que pueda moverme por los directorios.

uname -rtambién devuelve el Segmentation fault (core dumped)mensaje, por lo que no estoy seguro de qué versión del kernel estoy usando.

Respuesta1

Como puedes iniciar sesión, no hay ningún problema importante; presumiblemente los scripts de inicio de su shell se agregan ~/liba LD_LIBRARY_PATH, y eso, junto con las bibliotecas defectuosas en ~/lib, es lo que causa los problemas que está viendo.

Para solucionar este problema, ejecute

unset LD_LIBRARY_PATH

Esto le permitirá ejecutar rm, vimetc. para eliminar las bibliotecas problemáticas y editar los scripts de inicio si corresponde.

Respuesta2

El problema es que has puesto una copia glibcen tu ~/libdirectorio y esa biblioteca es incompatible con el sistema en el que la has subido. Se hace referencia a la biblioteca como ~/libse especifica en $LD_LIBRARY_PATH.

Para solucionar este problema temporalmente, simplemente unset LD_LIBRARY_PATH: esto funcionará como unsetsi fuera un shell integrado. Luego podrá ejecutar su editor de texto favorito para eliminar lo que sea que esté en sus archivos de inicio que esté configurando la variable en primer lugar.

Respuesta3

Lo que encontré en Linux Yocto Sumo v4.14, pero debería ser idéntico a todos los kernels de Linux:

  • Puede intercambiar entre 2 versiones de las bibliotecas principales, en /lib la predeterminada y /usr/lib la publicación del usuario instalada o la publicación adjunta.
  • Para eso, simplemente configure la variable LD_LIBRARY_PATH en cada comando. O alternativamente llame a exportar desde el principio, es decir
export LD_LIBRARY_PATH=/lib
# now everything should work again since there should 
be a valid backup version of glibc in /lib

# try use a command again 
ls ./

#if this works you can overwrite the broken version of glibc in /usr/lib
cp -faL /lib/libc.so* /usr/lib/
cp -faL /lib/libc-*so* /usr/lib/

#should be optional but for the sake of completeness, as the libc package 
# installs all of the following: 
# direct dependencies and are versioned using 
# the same version number as glibc
cp -faL /lib/ld*.so* /usr/lib/
cp -faL /lib/libdl*.so* /usr/lib/
cp -faL /lib/libm*.so* /usr/lib/
cp -faL /lib/libnsl*.so* /usr/lib/
cp -faL /lib/libnss*.so* /usr/lib/
cp -faL /lib/librt*.so* /usr/lib/
cp -faL /lib/libutil*.so* /usr/lib/
cp -faL /lib/libpthread*.so* /usr/lib/
cp -faL /lib/libcrypt*.so* /usr/lib/
cp -faL /lib/libresolv*.so* /usr/lib/







Esto debería funcionar !

información relacionada