다음과 같은수동동적 링커/로더 라이브러리를 설명합니다.
ld.so 프로그램은 오래 전에 사용된 형식인 a.out 바이너리를 처리합니다. ld-linux.so*는 ELF(libc5의 경우 /lib/ld-linux.so.1, /lib/ld-linux.dll)를 처리합니다. so.2) 모두가 수년간 사용해 왔습니다.
우분투 15.04를 사용하고 있는데 아무 것도 없습니다ld.so. 내 시스템에는 ld-2.21.so에 대한 일부 심볼릭 링크가 포함되어 있습니다.
/lib/ld-linux.so.2 -> /lib32/ld-linux.so.2
/lib32/ld-linux.so.2 -> ld-2.21.so
/lib64/ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.21.so
이는 시스템이 a.out 바이너리를 처리할 수 없다는 의미입니까(ld.so가 탑재되어 있지 않기 때문에)? 또한 ld-linux.so.2는 매뉴얼에 설명된 라이브러리가 아닌 심볼릭 링크입니다. 그것을 설명하는 방법?
답변1
귀하의 시스템은 그렇지 않으므로 /lib/ld.so
a.out 실행 파일을 동적으로 링크하는 기능이 없습니다. 커널이 정적으로 연결된 a.out 실행 파일을 지원하는 경우 이를 탑재할 수 있습니다. Ubuntu는 그렇지 않습니다( CONFIG_BINFMT_AOUT
커널 구성 옵션이 필요함). a.out 형식은 Linux에서 약 20년 동안 사용되지 않았으며 약 15년 동안 사용되지 않았으므로 오늘날 대부분의 시스템에서는 지원을 중단했습니다.
/lib/ld-linux.so.1
/lib/ld-linux.so.2
GNU/Linux ELF 동적 로더의 두 가지 다른 버전이 있으며 각 버전에는 고유한 버전이 있습니다 .ABI. 버전 1(libc5에 해당)은 a.out 이후 몇 년만 지나면 더 이상 사용되지 않으며 현재 대부분의 시스템에서 지원되지 않습니다. 현재 버전 2는 GNU libc6에 해당합니다.
각 아키텍처에는 고유한 동적 로더 명명 규칙과 버전 번호가 있습니다(프로세서 아키텍처마다 실제로 ABI가 다릅니다). /lib/ld-linux.so.2
x86_32 이름입니다. x86_64에서 일반적인 위치는 /lib64/ld-linux-x86-64.so.2
.on armel이고 위치는 /lib/ld-linux.so.3
.on armhf /lib/ld-linux-armhf.so.3
등 입니다.
/lib/ld-linux.so.2
라이브러리입니다(더 정확하게는 동적으로 링크된 공유 객체입니다. 동적 로더는 일반적으로 라이브러리라고 부르지 않습니다). 일반 파일이 아닌 일반 파일에 대한 심볼릭 링크라는 사실은 요점을 바꾸지 않습니다. 라이브러리로 만드는 것은 내용입니다.