Differenza tra / usr / include / sys e / usr / include / linux?


12

Bene, ovviamente c'è una differenza, ma sono curioso di sapere perché alcune cose vanno sotto / usr / include / sys e altre vanno sotto / usr / include / linux e hanno lo stesso nome del file di intestazione? Ciò ha a che fare con POSIX vx non POSIX?

Inoltre, sono riuscito a popolare / usr / include / linux con le intestazioni sul mio sistema Fedora afferrando un pacchetto kernel-headers, c'è un nome pacchetto standard per me per ottenere i file header che vanno sotto / usr / include / sys ? Non sono riuscito a trovarlo.

Risposte:


14

Le intestazioni sotto /usr/include/linuxe sotto /usr/include/asm*sono distribuite con il kernel Linux. Le altre intestazioni ( /usr/include/sys/*.h, /usr/include/bits/*.he molte altre) sono distribuite con la libreria C (la libreria GNU C , nota anche come glibc, su tutti i sistemi Linux non incorporati). C'è una piccola spiegazione nel manuale di glibc .

Si noti che /usr/include/linuxe /usr/include/asmdovrebbe contenere le intestazioni utilizzate durante la compilazione della libreria C, non le intestazioni del kernel in esecuzione. Altrimenti, se alcune costanti o strutture di dati vengono modificate, si verificherà un'incoerenza tra il programma compilato e la libreria C, che potrebbe causare un arresto anomalo o peggiore. (Se le intestazioni corrispondono alla libreria C ma la libreria C non corrisponde al kernel, ciò che effettivamente accade è che il kernel è progettato per mantenere un ABI stabile e deve rilevare che è chiamato sotto un ABI diverso e interpretare di conseguenza gli argomenti syscall. il kernel deve farlo comunque per i programmi compilati staticamente.)

Ricordo un acceso dibattito tra Debian e Red Hat qualche tempo fa (un decennio?) Sulla /usr/include/linuxquestione; apparentemente ogni lato si attacca alla sua posizione. (Per quanto ho capito, Debian ha ragione, come spiegato sopra.) Debian attualmente distribuisce /usr/include/linuxe amici nel linux-libc-devpacchetto, che è compilato dai sorgenti del kernel ma non aggiornato con il kernel. Le intestazioni del kernel sono in pacchetti specifici della versione che forniscono il linux-headers-2.6metapacchetto; questo è ciò di cui hai bisogno per compilare un modulo per una particolare versione del kernel.

Il pacchetto che stai cercando sono le intestazioni della libreria C. Non so come si chiama, ma puoi scoprirlo con yum provides /usr/include/sys/types.h.


2
La risposta all'ultimo bit è glibc-headers.
Mattdm,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.