작동하는 명령이 거의 없습니다 - 재배치 오류: 기호 __getrlimit, 버전 GLIBC_PRIVATE가 libc.so.6에 정의되어 있지 않습니다.

작동하는 명령이 거의 없습니다 - 재배치 오류: 기호 __getrlimit, 버전 GLIBC_PRIVATE가 libc.so.6에 정의되어 있지 않습니다.

루트 액세스 권한이 없는 컴퓨터에 SSH를 통해 연결하고 있습니다. 무언가를 설치하기 위해 내 컴퓨터에서 라이브러리를 업로드하고 ~/lib원격 호스트의 디렉토리에 배치했습니다.

이제 실행하는 거의 모든 명령에 대해 다음 오류(예: ls) 또는 Segmentation fault (core dumped)메시지가 표시됩니다.

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

지금까지 성공적으로 실행한 유일한 명령은 cd및 입니다. pwdTAB 자동 완성을 사용하면 디렉터리에서 파일을 거의 찾을 수 있으므로 ls디렉터리 내에서 이동할 수 있습니다.

uname -r또한 메시지를 반환 Segmentation fault (core dumped)하므로 사용 중인 커널 버전이 확실하지 않습니다.

답변1

이제 로그인할 수 있으므로 큰 문제는 없습니다. 아마도 쉘의 시작 스크립트가 여기에 추가되었으며 ~/lib라이브러리 LD_LIBRARY_PATH의 버그와 함께 이것이 ~/lib보고 있는 문제의 원인일 것입니다.

이 문제를 해결하려면 다음을 실행하세요.

unset LD_LIBRARY_PATH

이렇게 하면 문제가 있는 라이브러리를 제거하고 시작 스크립트를 편집하기 위해 rm등을 실행할 수 있습니다 (해당되는 경우).vim

답변2

문제는 라이브러리 사본을 디렉토리에 넣었 glibc는데 ~/lib라이브러리가 업로드한 시스템과 호환되지 않는다는 것입니다. 라이브러리는 ~/lib에 지정된 대로 참조 됩니다 $LD_LIBRARY_PATH.

이 문제를 일시적으로 해결하는 방법은 간단합니다. 내장 쉘처럼 작동합니다 unset LD_LIBRARY_PATH. unset그런 다음 즐겨 사용하는 텍스트 편집기를 실행하여 처음에 변수를 설정하는 시작 파일의 모든 항목을 삭제할 수 있습니다.

답변3

Linux Yocto Sumo v4.14에서 찾은 내용은 모든 Linux 커널에서 동일해야 합니다.

  • 기본 라이브러리의 두 가지 버전, /lib의 기본 버전, /usr/lib의 사용자 배포판 설치 버전 간에 교환하거나 추가 버전을 릴리스할 수 있습니다.
  • 이렇게 하려면 각 명령에 LD_LIBRARY_PATH 변수를 설정하면 됩니다. 아니면 처음부터 내보내기를 호출하세요.
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/







이것은 트릭을 수행해야합니다!

관련 정보