Różnica między / usr / include / sys a / usr / include / linux?

12

Cóż, oczywiście jest różnica, ale jestem ciekawy, dlaczego niektóre rzeczy znajdują się pod / usr / include / sys, a inne pod / usr / include / linux i mają taką samą nazwę pliku nagłówkowego? Czy to ma coś wspólnego z POSIX vx innym niż POSIX?

Udało mi się również zapełnić / usr / include / linux nagłówkami w moim systemie Fedora, pobierając pakiet kernel-headers. Czy jest dla mnie standardowa nazwa pakietu, aby uzyskać pliki nagłówkowe w katalogu / usr / include / sys ? Nie udało mi się go znaleźć.

Jeff
źródło

Odpowiedzi:

14

Nagłówki pod /usr/include/linuxi pod /usr/include/asm*są dystrybuowane wraz z jądrem Linuksa. Pozostałe nagłówki ( /usr/include/sys/*.h, /usr/include/bits/*.hi wiele innych) są dystrybuowane wraz z biblioteką C (biblioteka GNU C , znana również jako glibc, we wszystkich niewbudowanych systemach Linux). W podręczniku glibc znajduje się małe wyjaśnienie .

Zauważ, że /usr/include/linuxi /usr/include/asmpowinny zawierać nagłówki użyte podczas kompilacji biblioteki C, a nie nagłówki z działającego jądra. W przeciwnym razie w przypadku zmiany niektórych stałych lub struktur danych wystąpi niespójność między skompilowanym programem a biblioteką C, co może spowodować awarię lub pogorszenie. (Jeśli nagłówki pasują do biblioteki C, ale biblioteka C nie pasuje do jądra, to tak naprawdę dzieje się tak, że jądro jest zaprojektowane tak, aby utrzymywać stabilny ABI i musi wykryć, że jest wywoływane pod innym ABI i odpowiednio interpretować argumenty syscall. jądro i tak musi to zrobić dla programów skompilowanych statycznie).

Pamiętam gorącą debatę między Debianem a Red Hatem, która odbyła się jakiś czas temu (dekada?) /usr/include/linuxTemu; najwyraźniej każda strona trzyma się swojej pozycji. (O ile rozumiem, Debian ma rację, jak wyjaśniono powyżej.) Debian obecnie rozpowszechnia /usr/include/linuxi przyjaciół w linux-libc-devpakiecie, który jest kompilowany ze źródeł jądra, ale nie jest aktualizowany z jądrem. Nagłówki jądra są w pakietach specyficznych dla wersji zapewniających linux-headers-2.6metapakiet; tego właśnie potrzebujesz, aby skompilować moduł dla konkretnej wersji jądra.

Pakiet, którego szukasz, to nagłówki bibliotek C. Nie wiem, jak się nazywa, ale możesz się dowiedzieć yum provides /usr/include/sys/types.h.

Gilles „SO- przestań być zły”
źródło
2
Odpowiedź na ostatni bit jest glibc-headers.
mattdm