파일 명령에 ELF 바이너리가 Linux 2.6.9 용이라고 표시되는 이유는 무엇입니까?


18

ELF 바이너리에서 파일을 실행할 때마다 다음과 같은 출력이 나타납니다.

[jonescb@localhost ~]$ file a.out
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for
GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, 
not stripped

Linux 2.6.9에서이 바이너리를 2.6.8에서 실행할 수 없다는 점이 궁금합니다. ELF 지원이 Linux 2.0에서 추가되지 않았습니까?

답변:


23

glibc--enable-kernel지원되는 최소 커널 버전을 지정할 수 있는 구성 옵션 이 있습니다. 객체 파일이 해당 glibc 빌드와 링크되면 링커는 SHT_NOTE 섹션을 .note.ABI-tag해당 최소 커널 버전을 포함하는 결과 실행 파일에 추가합니다 . 정확한 형식은에 정의 된 LSB 하고, file그 부분 어떻게 해석하는 방법을 찾기 위해 알고있다.

특정 glibc가 2.6.9를 요구하도록 만들어진 이유는 누가 그것을 빌드했는지에 달려 있습니다. 내 시스템 (Gentoo)에서도 마찬가지입니다. glibc ebuild의 한 의견에 따르면 NPTL에 필요한 최소값이므로 2.6.9를 지정한다고합니다 . 일반적인 선택 일 가능성이 높습니다. 또 다른 한 올 것으로 보인다는 이 최소가 필요했기 때문에, 2.4.1입니다 리눅스 쓰레드 , NPTL 전에 사용 된 패키지


필요한 최소 커널 버전을 늘릴 때 성능이 향상됩니까? 그렇게하면 어떤 이점이 있습니까?
Aaron Franke

여기 (Fedora 31, x86_64) /lib/libc-2.30.so에는 커널 3.20이 필요합니다 (현재 커널 버전은 5.3.12-300 임)
vonbrand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.