glibc,uclibc,eglibc,musl-libc区别和联系

Libc

Linux操作系统运行时的基础库,提供了各类操作的基本调用。它的实现也有多种,以适应不同的应用环境。本文就着重介绍它们之前的区别和联系。

Glib

glib是gtk+的基础库,它由基础类型、对核心应用的支持、实用功能、数据类型和对象系统五个部分组成,可以在其官方网站下载其源代码。这是一个综合用途的实用的轻量级的C程序库,它提供C语言的常用的数据结构的定义、相关的处理函数,有趣而实用的宏,可移植的封装和一些运行时机能,如事件循环、线程、动态调用、对象系统等的API。gtk+与glib都是可移植的,glib最有名的就是GNOME桌面环境了。

1、Glibc glibc = GNU C Library

是GNU项(GNU Project)目,所实现的C语言标准库(C standard library)。广泛存在于目前最常见的桌面和服务器中的GNU/Linux类的系统中,都是用的这套C语言标准库。它实现了常见的C库的函数,支持很多种系统平台,功能很全,但是也相对比较臃肿和庞大。如果出现漏洞也影响巨大,如 glibc 幽灵漏洞等。

2、uClibc 一个小型的C语言标准库,主要用于嵌入式。

其最开始设计用于uClinux(注:uClinux不支持MMU),因此比较适用于微处理器中。 对应的,此处的u意思是μ,Micro,微小的意思。 uClibc的特点: (1)uClibc比glibc要小很多。 (2)uClibc是独立的,为了应用于嵌入式系统中,完全重新实现出来的。和glibc在源码结构和二进制上,都不兼容。

3、EGLIBC EGLIBC = Embedded GLIBC

EGLIBC是(后来)glibc的原创作组织FSF所(新)推出的,glibc的一种变体,目的在于将glibc用于嵌入式系统。EGLIBC的目标是:

(1)保持源码和二进制级别的兼容于Glibc源代码架构和ABI层面兼容

如果真正实现了这个目标,那意味着你之前用glibc编译的程序,可以直接用eglibc替换,而不需要重新编译。这样就可以复用之前的很多的程序了。

(2)降低(内存)资源占用/消耗。

(3)使更多的模块为可配置的(以实现按需裁剪不需要的模块)。

(4)提高对于交叉编译(cross-compilation)和交叉测试(cross-testing)的支持
Eglibc的最主要特点就是可配置,这样对于嵌入式系统中,你所不需要的模块,比如NIS,locale等,就可以裁剪掉,不把其编译到库中,使得降低生成的库的大小了。

Eglibc的特点
1.写程序,需要用到很多c语言的库函数。所有的库函数加起来,就是对应的C语言(标准)函数库。

2.目前在普通GNU/Linux系统中所用的C语言标准库,叫做glibc。其功能很全,函数很多,但是代码太多,编译出来的函数库的大小也很大,即资源占用也很多。

3.而嵌入式系统中,也需要C语言写代码实现特定功能,也需要用到C语言函数库,但是由于嵌入式系统中,一般资源比较有限,所以不适合直接使用(太占用资源的)gLibc。

4.所以有人就又(没有参考glibc,而是从头开始,)重新实现了一个用于嵌入式系统中的,代码量不是很大的,资源占用相对较少的,C语言函数库,叫做uClibc。并且,uClibc不支持MMU(内存管理单元)。

5.而后来glibc的开发者又推出个Embedded glibc,简称eglibc,其主要目的也是将glibc用于嵌入式领域。相应最大的改动就在于,把更多的库函数,改为可配置的,这样如果你的嵌入式系统中不需要某些函数,就可以裁剪掉,不把该函数编译到你的eglibc库中,使得最终生成的eglibc库的大小变小,最终符合你的嵌入式系统的要求(不能超过一定的大小),这样就实现了,把glibc引用于嵌入式系统中的目的了。

这样复杂多变使得一些主流发行版本在它们之间切换,Debian就用GLIBC替代EGLIBC。

可以简单的理解为: glibc,uClibc,eglibc都是C语言函数库:

  1. uClibc是嵌入式系统中用的,glibc是桌面系统用的
  2. eglibc也是嵌入式系统中用的,是glibc的嵌入式版本,和glibc在源码和二进制上兼容。

4、Musl-libc

C语言标准库Musl-libc项目发布了1.0版。Musl是一个轻量级的C标准库,设计作为GNU C library (glibc)、 uClibc或Android Bionic的替代用于嵌入式操作系统和移动设备。它遵循POSIX 2008规格和 C99 标准,采用MIT许可证授权,使用Musl的Linux发行版和项目包括sabotage,bootstrap-linux,LightCube OS等等。

参考文章

添加新评论