답변:
libc.so
Ubuntu 11.04에서 다중 아키텍처 작업의 일부로 이동했습니다 . 심볼릭 링크가 없을 수있는 이유는 멀티 아키 텍의 목적이 64 비트 시스템에서 32 비트 바이너리를보다 쉽게 실행할 수 있도록 버전 i386
과 amd64
버전을 동시에 설치할 libc
수 있기 때문입니다. 그 반대의 경우도 마찬가지입니다. libc6
패키지에 새 위치에 대한 심볼릭 링크가 포함되어 있으면 다른 아키텍처에 대한 해당 패키지 버전을 동시에 설치할 수 없으며 (심볼 링크의 버전은 dpkg
무엇입니까?) 연습의 전체 요점을 무너 뜨릴 수 있습니다.
경로를 하드 코딩하는 것은 libc.so
Ubuntu 11.04부터 올바르게 작동하도록 업데이트해야합니다. 말씀하신 스크립트가 Ubuntu의 일부인 경우 버그를보고하고 multiarch
태그를 추가하십시오 .
/lib/libc.so.6
에서는 32 비트 라이브러리 또는 64 비트 라이브러리 인지 에 대해 혼동하지 않습니다 .
동적 라이브러리는 커널에 의해로드되며 경로는 프로그램에서 하드 코딩되지 않습니다. 프로그램은 그냥 "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
)가 다시 작성되지 않습니다.
/usr/local/lib
,에서 심볼릭 링크를 만들면 제대로 작동합니다 /usr/lib
. 이 행동의 원인은 무엇입니까?
ldconfig -v -N | grep '^/'
있습니까?