菜单开关

周梦康 发表于 2020-11-23 501 次浏览 标签 : 《Linux C 入门笔录》

上节课中,我们说到printf 依赖了标准库<stdio.h>,那我们在 GNU/Linux 开发中一般使用的标准库就是 glibc

发展历程

根据如下时间线看下 C99 和 glibc 的发展历程

补天柱地 - glibc GNU/Linux 编程基石

简单来说,美国国家标准协会(ANSI)统一了C语言的很多标准,其中包含里一系列基础函数,也就是定义了一些函数头文件,比如我们非常常用的打印函数printf属于标准输入输出stdio.h

GNU 的开发工程师来负责在 GNU 系统上实现 C 语言标准库。实现这些函数的项目就是 glibc,当然 glibc 不仅仅实现了 C99 ,也实现了 POSIX 接口等。

libc 、glibc 、Linux libc

这几个概念,我们入门看书的或者查资料的时候,很容易混淆,下面我们看看官方的解释说明

下面这段摘录自 https://man7.org/linux/man-pages//man7/libc.7.html

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

实际其链接的是libc-2.17,glibc 的布历史可以在 https://sourceware.org/glibc/wiki/Glibc%20Timeline 查看。

说了这么多,其实主要是要强调当我们在 GNU/Linux 做 C 开发的时候,我们是离不开 glibc 的, glibc 是应用程序与系统调用的桥梁。

推荐链接

官方地址 https://www.gnu.org/software/libc/libc.html
C 标准库头文件 https://zh.cppreference.com/w/c/header

评论列表