上节课中,我们说到printf依赖了标准库,那我们在 GNU/Linux 开发中一般使用的标准库就是 glibc
发展历程
根据如下时间线看下 C99 和 glibc 的发展历程
简单来说,美国国家标准协会(ANSI)统一了C语言的很多标准,其中包含里一系列基础函数,也就是定义了一些函数头文件,比如我们非常常用的打印函数printf属于标准输入输出stdio.h。
GNU 的开发工程师来负责在 GNU 系统上实现 C 语言标准库。实现这些函数的项目就是 glibc,当然 glibc 不仅仅实现了 C99 ,也实现了 POSIX 接口等。
libc 、glibc 、Linux libc
这几个概念,我们入门看书的或者查资料的时候,很容易混淆,下面我们看看官方的解释说明
libc 即美国国家标准协会(ANSI)C语言标准库,他是一个规范,标准,无具体实现。
1990 年,因为 glibc 对 Linux 的支持不太好,Linux 内核开发者们就 fork 了 glibc 叫做 Linux libc,发布了 2,3,4,5 版本。最后版的共享库文件名是libc.so.5。
1997 年 glibc 2.0 发布,由于太过于优秀,各个 linux 发行版纷纷切换回 glibc,为了避免与 Linux libc 版本发生任何冲突,所以在 Linux 系统中后面一直是 libc6,文件名一直是libc.so.6。
比如在我服务器上执行$ ls -al /usr/lib64 | grep libc.so
-rw-r--r-- 1 root root 253 8月 7 2019 libc.so
lrwxrwxrwx 1 root root 12 9月 28 2019 libc.so.6 -> libc-2.17.so
说了这么多,其实主要是要强调当我们在 GNU/Linux 做 C 开发的时候,我们是离不开 glibc 的, glibc 是应用程序与系统调用的桥梁。
推荐链接