Sự khác biệt giữa / usr / include / sys và / usr / include / linux?


12

Chà, rõ ràng là có một sự khác biệt, nhưng tôi tò mò về lý do đằng sau lý do tại sao một số thứ nằm dưới / usr / include / sys và những thứ khác lại nằm dưới / usr / include / linux và có cùng tên tệp tiêu đề? Điều này có liên quan gì đến POSIX vx không phải POSIX không?

Ngoài ra, tôi đã quản lý để điền / usr / include / linux với các tiêu đề trên hệ thống Fedora của mình bằng cách lấy gói tiêu đề kernel, có tên gói tiêu chuẩn để tôi nhận các tệp tiêu đề nằm dưới / usr / include / sys ? Tôi đã không thể tìm thấy nó.

Câu trả lời:


14

Các tiêu đề dưới /usr/include/linuxvà dưới /usr/include/asm*được phân phối với nhân Linux. Các tiêu đề khác ( /usr/include/sys/*.h, /usr/include/bits/*.hvà nhiều hơn nữa) được phân phối với thư viện C (thư viện GNU C , còn được gọi là glibc, trên tất cả các hệ thống Linux không nhúng). Có một lời giải thích nhỏ trong hướng dẫn sử dụng glibc .

Lưu ý rằng /usr/include/linux/usr/include/asmnên chứa các tiêu đề đã được sử dụng khi biên dịch thư viện C, không phải các tiêu đề từ kernel đang chạy. Mặt khác, nếu một số hằng hoặc cấu trúc dữ liệu thay đổi, sẽ có sự không nhất quán giữa chương trình được biên dịch và thư viện C, có khả năng dẫn đến sự cố hoặc tệ hơn. . kernel phải làm điều này cho các chương trình được biên dịch tĩnh.)

Tôi nhớ một cuộc tranh luận sôi nổi giữa Debian và Red Hat một thời gian (một thập kỷ?) Trước đây về /usr/include/linuxvấn đề này; rõ ràng mỗi bên đang bám sát vị trí của nó. (Theo như tôi hiểu, Debian đã đúng, như đã giải thích ở trên.) Debian hiện phân phối /usr/include/linuxvà bạn bè trong linux-libc-devgói, được biên dịch từ các nguồn kernel nhưng không được nâng cấp với kernel. Các tiêu đề hạt nhân nằm trong các gói dành riêng cho phiên bản cung cấp linux-headers-2.6siêu dữ liệu; đây là những gì bạn cần để biên dịch một mô-đun cho một phiên bản kernel cụ thể.

Gói bạn đang tìm kiếm là các tiêu đề thư viện C. Tôi không biết nó được gọi là gì, nhưng bạn có thể tìm hiểu yum provides /usr/include/sys/types.h.


2
Câu trả lời cho bit cuối cùng là glibc-headers.
mattdm
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.