8

为什么Linux内核只能用GCC编译?某些项目真正需要哪些 GNU C 扩展,为什么?

4

4 回答 4

9

这是 Linux 内核使用的几个 gcc 扩展:

  • 内联汇编
  • gcc 内置函数,例如 __builtin_expect、__builtin_constant、__builtin_return_address
  • 函数属性以指定例如要使用的寄存器(例如 __attribute__((regparm(0)),__attribute__((packed, aligned(PAGE_SIZE))) ) )
  • 取决于 gcc 预定义宏的特定代码(例如,某些版本中某些 gcc 错误的解决方法)
  • 开关案例中的范围(案例 8 ... 15:)

这里还有一些:http ://www.ibm.com/developerworks/linux/library/l-gcc-hacks/

这些 gcc 细节中的大部分都非常依赖于体系结构,或者由于 gcc 的实现方式而成为可能,并且可能没有意义由 C 标准指定。其他的只是对 C 的方便扩展。由于构建 Linux 内核是为了依赖这些扩展,因此其他编译器必须提供与 gcc 相同的扩展才能构建内核。

并不是说Linux必须依赖gcc 的这些特性,例如NetBSD 内核很少依赖gcc 特定的东西。

于 2010-04-20T21:05:48.617 回答
3

GCC 支持不属于 C99 标准的嵌套函数。也就是说,需要进行一些分析才能了解它们在 linux 内核中的实际流行程度。

于 2010-04-20T20:54:05.600 回答
2

Linux 内核被编写为由 GCC 编译,因此标准合规性从来都不是内核开发人员的目标。

如果 GCC 提供了一些有用的扩展,使编码更容易或编译内核更小或更快,那么使用这些扩展是一个自然的选择。

于 2010-04-20T20:59:58.263 回答
0

我想它们并不是真的那么必要。只是有很多有用的,而且交叉编译器的可移植性对于 Linux 内核来说并不是一个放弃细节的问题。更不用说摆脱对扩展的依赖需要大量的工作。

于 2010-04-20T20:55:06.563 回答