当前位置: 首页 > article >正文

一文说清libc、glibc、glib的发展和关系

一 引言

在大家的技术生涯中,一定会遇到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简介


http://www.kler.cn/a/396306.html

相关文章:

  • C/C++静态库引用过程中出现符号未定义的处理方式
  • 活动|华院计算作为联盟理事单位出席进博会全球人工智能合作论坛
  • ElementUI的日期组件中禁止选择小时、分钟、秒
  • TVBox 网络接口
  • linux常见资源查询命令(持续更新)
  • 《Python Web 抓取实战:豆瓣电影 Top 250 数据抓取与分析》
  • 《JavaScript 前端开发》
  • python学习_2.去除字符strip方法
  • CC3学习记录
  • H5页面多个视频如何只同时播放一个?
  • 【idea】更换快捷键
  • 51c大模型~合集42
  • ComfyUI-image2video模型部署教程
  • 第三代指标平台和其他BI工具/指标管理平台有何区别
  • 【Linux学习】【Ubuntu入门】1-4 ubuntu终端操作与shell命令2
  • 聊天服务器(7)数据模块
  • 29-Elasticsearch 集群监控
  • i春秋-SQLi(无逗号sql注入,-- -注释)
  • Android Binder通信02 - 驱动分析 - 架构介绍
  • Python读写Excel的全面教程
  • Rust 入门指南(零):安装及 Cargo 管理器
  • 用EXCEL一列数据拼接SQL的where条件in语句
  • wordpress下载站主题推荐riproV5 wordpress日主题
  • python makedirs() 详解
  • 动态规划-背包问题——[模版]完全背包问题
  • NotePad++中安装XML Tools插件