Fast keine Befehle funktionieren – Umzugsfehler: Symbol __getrlimit, Version GLIBC_PRIVATE nicht in libc.so.6 definiert

Fast keine Befehle funktionieren – Umzugsfehler: Symbol __getrlimit, Version GLIBC_PRIVATE nicht in libc.so.6 definiert

Ich bin per SSH mit einer Maschine verbunden, auf der ich keinen Root-Zugriff habe. Um etwas zu installieren, lade ich Bibliotheken von meiner Maschine hoch und lege sie in das ~/libVerzeichnis des Remote-Hosts.

Jetzt erhalte ich für fast jeden Befehl, den ich ausführe, den unten stehenden Fehler (Beispiel gilt für ls) oder eine Segmentation fault (core dumped)Meldung.

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

Die einzigen Befehle, die ich bisher erfolgreich ausführen konnte, sind cdund . Ich kann Dateien in einem Verzeichnis im Wesentlichen finden, indem ich die TAB-Taste zur automatischen Vervollständigung verwende , sodass ich mich durch Verzeichnisse bewegen kann.pwdls

uname -rgibt auch die Segmentation fault (core dumped)Meldung zurück, daher bin ich nicht sicher, welche Kernelversion ich verwende.

Antwort1

Da Sie sich anmelden können, ist nichts Wichtiges defekt. Vermutlich tragen die Startskripte Ihrer Shell zu ~/libbei LD_LIBRARY_PATHund dies ~/libist zusammen mit den fehlerhaften Bibliotheken in die Ursache der Probleme, die Sie feststellen.

Um dieses Problem zu beheben, führen Sie

unset LD_LIBRARY_PATH

Auf diese Weise können Sie usw. ausführen rm, vimum die problematischen Bibliotheken zu entfernen und ggf. Ihre Startskripte zu bearbeiten.

Antwort2

glibcDas Problem besteht darin, dass Sie eine Kopie von in Ihr Verzeichnis gelegt haben ~/libund diese Bibliothek mit dem System, auf das Sie sie hochgeladen haben, nicht kompatibel ist. Auf die Bibliothek wird wie ~/libin angegeben verwiesen $LD_LIBRARY_PATH.

Um dies vorübergehend zu beheben, gehen Sie einfach wie folgt vor unset LD_LIBRARY_PATH: Dies funktioniert, da unseteine Shell integriert ist. Sie können dann Ihren bevorzugten Texteditor ausführen, um das zu entfernen, was in Ihren Startdateien steht und die Variable überhaupt erst festlegt.

Antwort3

Was ich zu Linux Yocto Sumo v4.14 gefunden habe, was aber für alle Linux-Kernel identisch sein sollte:

  • Sie können zwischen zwei Versionen wichtiger Bibliotheken wechseln: in /lib die Standardversion und in /usr/lib die vom Benutzer installierte bzw. angehängte Version.
  • Dazu muss bei jedem Befehl einfach die Variable LD_LIBRARY_PATH gesetzt werden. Alternativ kann auch export von Anfang an aufgerufen werden, d.h.
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/







Das sollte funktionieren!

verwandte Informationen