/lib/libc.so.6가 누락 된 이유는 무엇입니까?


20
find | grep libc.so.6

이 글은 다음의 것을 알 수 /lib/i386-linux-gnu/libc.so.6있지만, 스크립트 내가 직접적 아래에있을 것으로 예상하고 있던 /lib왜 적어도 심볼릭 링크가 아니다?

심볼릭 링크를 넣으면 아무것도 깨뜨릴 수 있습니까?

답변:


22

libc.soUbuntu 11.04에서 다중 아키텍처 작업의 일부로 이동했습니다 . 심볼릭 링크가 없을 수있는 이유는 멀티 아키 텍의 목적이 64 비트 시스템에서 32 비트 바이너리를보다 쉽게 ​​실행할 수 있도록 버전 i386amd64버전을 동시에 설치할 libc수 있기 때문입니다. 그 반대의 경우도 마찬가지입니다. libc6패키지에 새 위치에 대한 심볼릭 링크가 포함되어 있으면 다른 아키텍처에 대한 해당 패키지 버전을 동시에 설치할 수 없으며 (심볼 링크의 버전은 dpkg무엇입니까?) 연습의 전체 요점을 무너 뜨릴 수 있습니다.

경로를 하드 코딩하는 것은 libc.soUbuntu 11.04부터 올바르게 작동하도록 업데이트해야합니다. 말씀하신 스크립트가 Ubuntu의 일부인 경우 버그를보고하고 multiarch태그를 추가하십시오 .


1
좋은 답변, 오늘 새로운 것을 배웠습니다 :)
Lekensteyn

1
내가 사용하는 프로세서는 64 비트 명령어를 지원하지 않습니다. 심볼릭 링크를 수동으로 추가하는 것과 관련된 위험이 있다고 말씀하십니까? 확실하지는 않지만, 그렇다면. 어쨌든 이것은 정답 인 것 같습니다. 감사.
Erik B

@ 에릭 B : 무엇? 32 비트 프로세서에서 64 앱을 사용하려고한다고 말하고 있습니까? 확실히 작동 하지 않을 것입니다. 32 비트 앱은 64 비트 프로세서에서 제대로 작동하지만 그 반대는 아닙니다.
Lekensteyn

@Lekensteyn 그것은 분명히 내가 말하는 것이 아닙니다. 내가 말하는 것은 64 비트 라이브러리를 사용하지 않는다는 것입니다. 따라서 내 특정 시스템 /lib/libc.so.6에서는 32 비트 라이브러리 또는 64 비트 라이브러리 인지 에 대해 혼동하지 않습니다 .
Erik B

3
64 비트 패키지를 사용하지 않을 경우 심볼릭 링크를 추가 할 때 심각한 위험이없는 것 같습니다.
콜린 왓슨

10

동적 라이브러리는 커널에 의해로드되며 경로는 프로그램에서 하드 코딩되지 않습니다. 프로그램은 그냥 "libc.so.6이 필요합니다"라고 말합니다. 그런 다음 시스템은 /etc/ld.so.conf에서 /usr/lib/lib기본적으로 포함하여 라이브러리 경로를 검색 합니다. 이 파일에는에 추가 구성 파일이 포함되어 /etc/ld.so.conf.d있습니다.

내 64 비트 시스템 에서 다음에 정의 된 경로 libc.so.6/lib/x86_64-linux-gnu/libc.so.6인해 찾을 수 있습니다 /etc/ld.so.conf.d/x86_64-linux-gnu.conf.

# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu

프로그램이 어떤 라이브러리를로드하는지 확인하려면 다음 ldd과 같이 사용하십시오 ldd /bin/bash.

    linux-vdso.so.1 =>  (0x00007ffff1dff000)
    libncurses.so.5 => /lib/libncurses.so.5 (0x00007f9d8b3b8000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d8b1b4000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d8ae1f000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f9d8b61c000)

심볼릭 링크를 놓아도 아무런 문제가 없습니다.

검색된 디렉토리 목록을 얻으려면 다음을 실행하십시오.

ldconfig -v -N | grep '^/'

-v파일 + 디렉토리 목록이 표시 되고 -N캐시 ( /etc/ld.so.cache)가 다시 작성되지 않습니다.


심볼릭 링크를 넣는 것은 아무것도 깨지 않을 것이지만 실제로 좋은 일을하지는 않을 것입니다.
Erik B

@ 에릭 B : 어떤 프로그램 / 스크립트를 언급하고 있습니까? 경로가 하드 코드되어 있기 때문에 스크립트가 혼란스러워한다는 것을 이해할 수 있습니다. 그러나 프로그램은 경로를 알 필요가 없습니다.
Lekensteyn

그게 어떻게 작동합니까? 프로그램이 설치된 라이브러리를 찾을 수없는 문제가있는 것 같지만 /usr/local/lib,에서 심볼릭 링크를 만들면 제대로 작동합니다 /usr/lib. 이 행동의 원인은 무엇입니까?
crazy2be

@ crazy2be : 당신은 출력을 게시 할 수 ldconfig -v -N | grep '^/'있습니까?
Lekensteyn

@ Lekensteyn : 물론 : pastebin.com/dtfnw2Tv . 내가 사용한 거의 모든 시스템의 일부 프로그램에서 발생했기 때문에 시스템 구성과 관련이 없다고 가정했습니다.
crazy2be

5

다음과 같이 libc.so.6 파일에 symlink를 추가하십시오.

sudo ln -s /lib/i386-linux-gnu/libc.so.6 /lib/libc.so.6

시스템에 남아있는 다른 누락 된 파일에 대해서도 마찬가지입니다. 내 경우 Matlab에 파일이 누락되어 문제가 사라졌습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.