GCC、glibc、GNU C(gnuc)的关系
GCC、glibc、GNU C(gnuc)的关系
1. 基本概念
GCC
- 全称 GNU Compiler Collection
- 是 GNU 项目下的编译器集合,支持多种语言(C、C++、Fortran 等)
- 主要功能:把源代码编译为目标代码或可执行文件
- 例子:
gcc hello.c -o hello
glibc
- 全称 GNU C Library
- 是 GNU 项目的 C 标准库实现
- 主要功能:
- 提供 系统调用封装(如
open()
、read()
、write()
) - 提供 标准 C 库函数(如
printf()
、malloc()
、strcmp()
)
- 提供 系统调用封装(如
- 程序运行时必须依赖 glibc,哪怕用 GCC 编译出来的程序也是如此。
GNU C(gnuc)
- 指 GNU 制定的 C 语言扩展规则
- 不是独立的软件,而是 GCC 实现的一套 C 语言规则
- 特点:
- 在标准 C 规则基础上增加了许多扩展功能(如
__attribute__
、typeof
、inline
) - 代码中常见
__GNUC__
宏,用于判断编译器是否支持这些规则
- 在标准 C 规则基础上增加了许多扩展功能(如
2. 三者关系
可以用 “编译器 → 语言规则 → 库” 来理解:
程序源码 (遵循 GNU C 规则)│▼GCC (编译器)│▼链接 glibc (C 标准库)│▼可执行文件
- GCC:负责编译代码
- GNU C(gnuc):GCC 遵循并支持的 C 语言规则(扩展标准 C)
- glibc:程序运行时所需的标准库函数和系统接口
3. 生活化类比
- GCC 像一个“厨师”
- 负责把食材(源代码)做成菜(可执行文件)
- GNU C(gnuc) 是“烹饪规则”
- 厨师遵循标准规则(ISO C),但加了自己家特色的做法(GNU 扩展规则)
- glibc 是“调料和配料”
- 大多数菜都需要它,不加调料(glibc)菜就做不出来或不好吃
4. 小结
- GCC:编译器工具
- GNU C(gnuc):GNU 扩展的 C 语言规则
- glibc:C 标准库的 GNU 实现,程序运行时需要
它们之间的关系是:
- GCC 遵循 GNU C 规则 来编译 C 代码
- 编译出的程序 链接 glibc 以调用标准库函数和系统接口