Die Header unter /usr/include/linux
und unter /usr/include/asm*
werden mit dem Linux-Kernel verteilt. Die anderen Header ( /usr/include/sys/*.h
, /usr/include/bits/*.h
und viele weitere) werden mit der C-Bibliothek verteilt (die GNU C-Bibliothek , auch als glibc bezeichnet, auf allen nicht eingebetteten Linux-Systemen). Es gibt eine kleine Erklärung im glibc-Handbuch .
Beachten Sie, dass /usr/include/linux
und /usr/include/asm
die Header enthalten sollte, die beim Kompilieren der C-Bibliothek verwendet wurden, nicht die Header des laufenden Kernels. Andernfalls besteht bei Änderungen einiger Konstanten oder Datenstrukturen eine Inkonsistenz zwischen dem kompilierten Programm und der C-Bibliothek, die wahrscheinlich zu einem Absturz oder einer Verschlechterung führt. (Wenn die Header mit der C-Bibliothek übereinstimmen, die C-Bibliothek jedoch nicht mit dem Kernel übereinstimmt, geschieht der Kernel tatsächlich so, dass er einen stabilen ABI beibehält, und muss erkennen, dass er unter einem anderen ABI aufgerufen wird, und die Syscall-Argumente entsprechend interpretieren Der Kernel muss dies ohnehin für statisch kompilierte Programme tun.)
Ich erinnere mich an eine hitzige Debatte zwischen Debian und Red Hat vor einiger Zeit (vor einem Jahrzehnt?) Zu diesem /usr/include/linux
Thema. anscheinend hält jede Seite an ihrer Position fest. (Soweit ich weiß, hat Debian Recht, wie oben erläutert.) Debian verteilt /usr/include/linux
und befreundet derzeit das linux-libc-dev
Paket, das aus Kernelquellen kompiliert, aber nicht mit dem Kernel aktualisiert wurde. Kernel-Header befinden sich in linux-headers-2.6
versionenspezifischen Paketen, die das Metapaket bereitstellen. Dies ist, was Sie benötigen, um ein Modul für eine bestimmte Kernel-Version zu kompilieren.
Das Paket, das Sie suchen, sind die C-Bibliotheksheader. Ich weiß nicht, wie es heißt, aber Sie können es mit herausfinden yum provides /usr/include/sys/types.h
.
glibc-headers
.