glibc,uclibc,eglibc的简介

本文介绍了三种C语言标准库:glibc、uClibc和EGLIBC。详细解释了它们的应用场景,特别是针对桌面系统和嵌入式系统的不同需求进行了对比。
部署运行你感兴趣的模型镜像
1.Glibc
glibc = GNU C Library
是GNU项(GNU Project)目,所实现的 C语言标准库(C standard library)。
目前,常见的桌面和服务器中的GNU/Linux类的系统中,都是用的这套C语言标准库。
其实现了常见的C库的函数,支持很多种系统平台,功能很全,但是也相对比较臃肿和庞大。

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的特点

【glibc, uClibc, Elibc的渊源/历史/区别/联系】
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引用于嵌入式系统中的目的了。

可以简单的理解为:
glibc,uClibc,eglibc都是C语言函数库:
1. uClibc是嵌入式系统中用的,glibc是桌面系统用的
2. eglibc也是嵌入式系统中用的,是glibc的嵌入式版本,和glibc在源码和二进制上兼容。

您可能感兴趣的与本文相关的镜像

`glibc` 和 `uClibc` 是两个用于 Linux 系统的 C 标准库实现,它们为应用程序提供基本的系统调用接口、字符串处理、文件操作等核心功能。它们在设计目标、性能、功能完整性等方面有显著差异。 --- ## 📌 一、glibc(GNU C Library) ### ✅ 简介: - **glibc** 是 GNU 项目提供的标准 C 库实现。 - 它是大多数桌面和服务器 Linux 发行版(如 Ubuntu、Debian、Red Hat)默认使用的 C 库。 ### ✅ 特点: | 特性 | 描述 | |------|------| | 功能丰富 | 支持完整的 POSIX 标准、线程、DNS 解析、国际化等 | | 兼容性好 | 与大多数 Linux 应用程序兼容 | | 占用空间大 | 适合资源丰富的系统 | | 开发活跃 | 社区维护活跃,文档丰富 | ### ✅ 示例代码: ```c #include <stdio.h> int main() { printf("Hello from glibc\n"); return 0; } ``` 编译: ```bash gcc hello.c -o hello ``` --- ## 📌 二、uClibc(Micro C Library) ### ✅ 简介: - **uClibc** 是一个轻量级的 C 标准库实现,专为嵌入式系统设计。 - 它常用于资源受限的系统(如路由器、IoT 设备、小型 Linux 发行版),是 OpenWrt、Buildroot 等嵌入式构建系统常用的库。 ### ✅ 特点: | 特性 | 描述 | |------|------| | 轻量小巧 | 适合内存和存储空间有限的设备 | | 可配置性强 | 编译时可以选择启用或禁用某些功能 | | 支持多种架构 | 如 ARM、MIPS、x86、PowerPC 等 | | 功能有限 | 不支持某些 glibc 的高级功能(如完整的 locale、NPTL 线程) | ### ✅ 示例代码(与 glibc 相同): ```c #include <stdio.h> int main() { printf("Hello from uClibc\n"); return 0; } ``` 但编译时需使用交叉编译工具链,例如: ```bash mips-linux-gcc -static hello.c -o hello ``` --- ## 📊 三、glibcuClibc 对比表 | 特性 | glibc | uClibc | |------------------|--------------------------------|----------------------------------| | 目标平台 | 桌面、服务器 | 嵌入式系统 | | 内存占用 | 大 | 小 | | 功能完整性 | 完整支持 POSIX、线程、DNS 等 | 选择性支持,可配置 | | 可移植性 | 支持主流架构 | 支持多种嵌入式架构 | | 国际化支持 | 完整 | 有限 | | 线程支持 | NPTL(原生 POSIX 线程) | 可选使用 uClibc-thread 或其他实现 | | 使用场景 | Ubuntu、Debian、Fedora 等 | OpenWrt、Buildroot、小型嵌入式系统 | --- ## 🧪 四、如何判断当前系统使用的是 glibc 还是 uClibc? 你可以运行以下命令来判断: ```bash ldd --version ``` 输出示例: - glibc: ``` ldd (GNU libc) 2.31 ``` - uClibc: ``` uClibc-ng-1.0.33 ``` --- ## ✅ 五、如何在嵌入式项目中选择? | 项目需求 | 推荐库 | |----------------------|--------| | 资源充足(内存 > 64MB) | glibc | | 极小系统(如 8MB Flash) | uClibc | | 需要完整 POSIX 支持 | glibc | | 需要最小化镜像大小 | uClibc | | 使用 OpenWrt 或 Buildroot | uClibc | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值