Tại sao lệnh tệp nói rằng các tệp nhị phân ELF dành cho Linux 2.6.9?


18

Bất cứ khi nào tôi chạy tệp trên nhị phân ELF, tôi nhận được kết quả này:

[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

Tôi chỉ tự hỏi điều gì đã thay đổi trong Linux 2.6.9 mà nhị phân này không thể chạy trên 2.6.8? Không hỗ trợ ELF được thêm vào trong Linux 2.0?

Câu trả lời:


23

glibccó một tùy chọn cấu hình được gọi là --enable-kernelcho phép bạn chỉ định phiên bản kernel được hỗ trợ tối thiểu. Khi các tệp đối tượng được liên kết với bản dựng glibc đó, trình liên kết sẽ thêm phần SHT_NOTE vào kết quả thực thi được đặt tên .note.ABI-tagcó chứa phiên bản kernel tối thiểu đó. Định dạng chính xác được xác định trong LSBfilebiết tìm phần đó và cách diễn giải nó.

Lý do glibc cụ thể của bạn được xây dựng để yêu cầu 2.6.9 tùy thuộc vào người đã xây dựng nó. Hệ thống của tôi cũng vậy (Gentoo); một nhận xét trong glibc ebuild nói rằng nó chỉ định 2.6.9 vì đó là mức tối thiểu cần thiết cho NPTL , vì vậy đó có thể là một lựa chọn phổ biến. Một cái khác dường như xuất hiện là 2.4.1, vì đó là yêu cầu tối thiểu cho LinuxThreads , gói được sử dụng trước NPTL


Bạn có đạt được cải tiến hiệu suất khi tăng phiên bản kernel yêu cầu tối thiểu không? Những lợi ích để làm như vậy là gì?
Aaron Franke

Tại đây (Fedora 31, x86_64) /lib/libc-2.30.so yêu cầu kernel 3.20 (phiên bản kernel hiện tại là 5.3.12-300)
vonbrand
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.