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


12

好吧,显然有区别,但是我很好奇为什么某些东西在/ usr / include / sys下,而另一些东西在/ usr / include / linux下,并且具有相同的头文件名呢?这与POSIX vx非POSIX有关吗?

另外,我已经通过抓取内核头文件包在Fedora系统上用头文件填充了/ usr / include / linux,我是否有一个标准的包名来获取头文件,该文件位于/ usr / include / sys下?我一直找不到。

Answers:


14

Linux /usr/include/linux下的标题和下方的标题/usr/include/asm*与Linux内核一起分发。其他标头(/usr/include/sys/*.h/usr/include/bits/*.h和以及更多)与C库一起分发(在所有非嵌入式Linux系统上为GNU C库,也称为glibc)。glibc手册中有一些解释

请注意,/usr/include/linux并且/usr/include/asm应该包含编译C库时使用的标头,而不是正在运行的内核中的标头。否则,如果某些常量或数据结构发生了变化,则编译后的程序与C库之间将存在不一致的情况,这有可能导致崩溃甚至更糟。(如果标头与C库匹配,但C库与内核不匹配,则实际发生的情况是内核旨在保持稳定的ABI,并且必须检测到它是在其他ABI下调用的,并相应地解释syscall参数。内核必须对静态编译的程序执行此操作。)

我记得Debian和Red Hat在十年(十年前)之间就此问题进行了激烈的辩论/usr/include/linux。显然,每一方都坚持自己的立场。(据我所知,Debian是正确的,如上所述)。Debian当前/usr/include/linuxlinux-libc-dev软件包中分发和朋友,该软件包是从内核源代码编译的,但未随内核升级。内核头文件位于提供linux-headers-2.6metapackage 的特定于版本的软件包中;这就是为特定内核版本编译模块所需要的。

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


2
最后一位的答案是glibc-headers
mattdm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.