/usr/include/sys 和 /usr/include/linux 之间的区别?

/usr/include/sys 和 /usr/include/linux 之间的区别?

嗯,显然是有区别的,但我很好奇为什么有些东西放在 /usr/include/sys 下而另一些东西放在 /usr/include/linux 下,并且具有相同的头文件名,背后的原因是什么?这与 POSIX vx non-POSIX 有什么关系吗?

另外,我已经通过获取 kernel-headers 包,成功地在我的 Fedora 系统上使用标头填充了 /usr/include/linux,是否有一个标准包名称可供我获取 /usr/include/sys 下的头文件?我一直没能找到它。

答案1

/usr/include/linux下面和下面的标头/usr/include/asm*随 Linux 内核一起分发。其他头文件(/usr/include/sys/*.h/usr/include/bits/*.h等等)随 C 库一起分发(GNU C 库,也称为 glibc,在所有非嵌入式 Linux 系统上)。有一点glibc手册中的解释

请注意,/usr/include/linux/usr/include/asm应该包含编译 C 库时使用的标头,而不是正在运行的内核中的标头。否则,如果某些常量或数据结构发生变化,编译后的程序和 C 库之间就会出现不一致,这很可能导致崩溃或更糟的情况。 (如果标头与 C 库匹配,但 C 库与内核不匹配,则实际发生的情况是内核被设计为保持稳定的 ABI,并且必须检测到它是在不同的 ABI 下调用的,并相应地解释系统调用参数。无论如何,内核必须对静态编译的程序执行此操作。)

我记得不久前(十年?)前 Debian 和 Red Hat 就这个/usr/include/linux问题进行了激烈的争论;显然双方都坚持自己的立场。 (据我了解,Debian 是正确的,如上所述。)Debian 目前的发行版/usr/include/linux和朋友在linux-libc-dev包,它是从内核源代码编译的,但不随内核一起升级。内核头文件位于特定于版本的包中,提供linux-headers-2.6元包;这是为特定内核版本编译模块所需的。

您正在寻找的包是 C 库头文件。我不知道它叫什么,但你可以通过 找到yum provides /usr/include/sys/types.h

相关内容