一 引言
在大家的技术生涯中,一定会遇到glib、glibc、libc这些个名词。
尤其像我这种对英文名脸盲的人,看着它们就头大,因为单从名字上看,也太像了,所以经常容易混淆。
即使翻翻网上的资料,看完还是有点懵。
所以,我花费一点时间,从历史发展的角度,梳理了一下它们到底是什么,以及彼此之间的联系。
二 发展历史
首先看看下面的图:
libc
1960年末至1970年初,C语言诞生。
随着C语言的标准化,libc作为其标准库的实现,也逐步发展和普及。
libc是Linux下的ANSI C函数库,是最基本的函数库之一,为开发者提供了丰富的标准库函数。
它包含了C语言标准库中的函数实现。主要涉及到输入输出、字符串处理、数学运算、内存管理等。
glibc
glibc,即GNU C Library,是Linux平台上使用最广泛的C运行库。
它最初由自由软件基金会FSF(FreeSoftware Foundation)发起开发,目的是为GNU操作系统开发一个C标准库。
随着Linux的越来越流行,glibc也主要关注Linux下的开发,成为了Linux平台的C标准。
20世纪90年代初,在glibc成为Linux下的C运行库之前,Linux的开发者们因为开发的需要,从Linux内核代码里面分离出了一部分代码,形成了早期Linux下的C运行库。这个C运行库又被称为Linux libc。这个版本的C运行库被维护了很多年,从版本2一直开发到版本5。如果你去看早期版本的Linux,会发现/lib目录下面有1ibc.so.5这样的文件,这个文件就是第五个版本的Linux libc。
1996年FSF发布了glibc2.0,这个版本的glibc开始支持诸多特性,比如它完全支持POSIX标准、国际化、IPv6、64-位委数据访问、多线程及改进了代码的可移植性。
在此时Linux libc的开发者也认识到单独地维护一份Linux下专用的C运行库是没有必要的,于是Linux开始采用glibc作为默认的C运行库,并且将2.x版本的glibc看作是Linux libc的后继版本。
于是我们可以看到,glibc在/lib(或者lib64)目录下的.so文件为libc.so.6,即第六个libc版本,而且在各个Linux发行版中,glibc往往被称为libc6。
glibc在Linux平台下占据了主导地位之后,它又被移植到了其他操作系统和其他硬件平台,诸如FreeBSD、NetBSD等,而且它支持数十种CPU及嵌入式平台。
glib
glib是Linux下C语言的一些工具库,它提供了一些实用的功能和接口,帮助开发者更方便地进行编程。
glib与glibc和libc不同,它并不是一个函数库,而是一个跨平台的、用C语言编写的底层库的集合。
glib为GNOME桌面环境提供了很多底层的支持,例如事件处理、线程管理、文件操作等。
虽然glib与glibc和libc在功能上有一定的重叠,但它们各自承担着不同的角色和职责。
三 总结
1 相同点
首先,这几个东西,都是linux系统下的库。
这就是它们最大的相同点。就像张三、李四和王五,大家的相同点,都是一个人。
2 差异点
通过上面的图,以及文字讲解,应该比较清晰了。
libc是最早的c库。
glibc是在libc的基础上扩展了,功能更强大。
glib虽然只跟glibc只差最后一个字母,但实际上没什么关系。
这么一梳理,是不是有些感觉了?
四 参考
本文参考了以下链接:
【Linux】理清gcc、glibc、libstdc++的关系
理清gcc、libc、glibc、libc++、libstdc++的关系
libc、glibc和glib:Linux环境下的C函数库及其关系
libc、glib、glibc简介