루트 액세스 권한이 없는 컴퓨터에 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
및 pwd
지금까지입니다. TAB을 사용하여 자동 완성을 하면 디렉터리에서 파일을 찾을 수 있으므로 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/
이것 은 트릭 을 해야 합니다 !