【问题标题】:why are there so many versions of header files in my system?为什么我的系统中有这么多版本的头文件?
【发布时间】:2013-04-21 00:09:13
【问题描述】:

我在高中时学会了使用 Pascal 编程,最近我决定走出沙盒,尝试弄清楚我的计算机是如何工作的。所以我在我的 iMac (i686) 上安装了 ubuntu 并开始学习 C,这似乎是“深入了解”的好方法。

我试图弄清楚的基本事情之一是内核在哪里结束,标准库从哪里开始。一本书告诉我linux系统调用(我理解为内核和库之间的接口)可以在头文件unistd.h中找到,所以这似乎是一个很好的起点。但是当我试图在我的系统上找到标题时(使用locate unistd.h),我得到了这个结果:

/usr/include/unistd.h
/usr/include/asm-generic/unistd.h
/usr/include/i386-linux-gnu/asm/unistd.h
/usr/include/i386-linux-gnu/bits/unistd.h
/usr/include/i386-linux-gnu/sys/unistd.h
/usr/include/linux/unistd.h
/usr/lib/syslinux/com32/include/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/alpha/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/arm/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/avr32/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/blackfin/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/c6x/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/cris/include/arch-v10/arch/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/cris/include/arch-v32/arch/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/cris/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/frv/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/h8300/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/hexagon/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/ia64/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/m32r/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/m68k/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/microblaze/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/mips/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/mn10300/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/openrisc/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/parisc/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/powerpc/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/s390/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/score/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/sh/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/sparc/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/tile/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/unicore32/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/x86/include/asm/ia32_unistd.h
/usr/src/linux-headers-3.5.0-27/arch/x86/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/arch/xtensa/include/asm/unistd.h
/usr/src/linux-headers-3.5.0-27/include/asm-generic/unistd.h
/usr/src/linux-headers-3.5.0-27/include/linux/unistd.h
/usr/src/linux-headers-3.5.0-27-generic/include/linux/unistd.h

为什么在我的系统中有这么多版本的这个文件——以及其他头文件?其中一些似乎是用于其他 CPU(如 sparc)的,那么为什么 ubuntu 会费心将它们安装在我的计算机上呢?以及这一切如何符合 Eric Raymond 所说的 SPOT 规则:“每条知识都必须在系统中具有单一、明确、权威的表示。” (Unix 编程的艺术,第 91 页。)

提前感谢您的帮助。如有必要,我很乐意阅读大书。

【问题讨论】:

  • "那么为什么 ubuntu 还要费心在我的电脑上安装它们呢?"因为您安装了 kernel-source 包(无论如何调用),它随整个源代码一起提供,适用于所有架构。

标签: c linux kernel standard-library


【解决方案1】:

我认为这些头文件直接来自 linux-3.5.0-27 源代码。 Ubuntu 开发人员不知道他们正在处理什么样的目标。也许是 Intel x86/powerPC/ 甚至是手机(ARM),所以他们只是复制所有的头文件并做一个简单的链接。

【讨论】:

  • 好的,谢谢。我想这解释了 /usr/src 目录中的所有标题,尽管我仍然对其他标题感到困惑。
猜你喜欢
  • 2023-04-11
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 2023-03-26
  • 2010-10-06
  • 2016-08-18
相关资源
最近更新 更多