Чому команда файлів говорить, що бінарні файли 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 говорить, що він вказує 2.6.9, оскільки це мінімум, необхідний для NPTL , тому, ймовірно, це загальний вибір. Ще один, який, здається, з'являється - це 2.4.1, оскільки це був мінімум, необхідний для LinuxThreads , пакета, який використовувався до NPTL


Чи отримуєте ви покращення продуктивності при збільшенні мінімально необхідної версії ядра? Які вигоди від цього?
Аарон Франке

Тут (Fedora 31, x86_64) /lib/libc-2.30.so потрібно ядро ​​3.20 (поточна версія ядра - 5.3.12-300)
vonbrand
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.