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

devtools/2024/11/16 17:16:25/

一 引言

在大家的技术生涯中,一定会遇到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.ppmy.cn/devtools/134484.html

相关文章

企业生产环境-麒麟V10(ARM架构)操作系统部署kafka高可用集群

前言:Apache Kafka是一个分布式流处理平台,由LinkedIn开发并捐赠给Apache软件基金会。它主要用于构建实时数据流管道和流应用。Kafka具有高吞吐量、可扩展性和容错性的特点,适用于处理大量数据。 以下是Kafka的一些核心概念和特性&#xff1…

基于HTTP编写ping操作

基于HTTP编写ping操作 前言 在上一集我们就完成了创建MockServer的任务,那么我们就可以正式开始进行网络的通讯,那么我们今天就来基于HTTP来做一个客户端ping服务端的请求,服务端返回pong的响应。 需求分析 基于HTTP,实现ping…

Java爬虫:获取商品历史价格信息 API 数据

穿越时空的购物侦探 引言 如果你以为Java只能用来制作乏味的桌面应用,那你一定没见识过它的另一面——一个能够穿越时空的购物侦探!今天,我们就来聊聊如何用Java编写一个爬虫,这个爬虫不仅能获取商品的当前价格,还能…

校园服务平台小程序ssm+论文源码调试讲解

第2章 关键技术简介 2.1 微信小程序 微信小程序,简称小程序,英文名Mini Program,是一种全新的连接用户与服务的方式,可以快速访问、快速传播,并具有良好的使用体验[12]。 小程序的主要开发语言是JavaScript&#xff…

本地部署Apache Answer搭建高效的知识型社区并一键发布到公网流程

文章目录 前言1. 本地安装Docker2. 本地部署Apache Answer2.1 设置语言选择简体中文2.2 配置数据库2.3 创建配置文件2.4 填写基本信息 3. 如何使用Apache Answer3.1 后台管理3.2 提问与回答3.3 查看主页回答情况 4. 公网远程访问本地 Apache Answer4.1 内网穿透工具安装4.2 创建…

maven的optional选项说明以及具体应用

写在前面 本文看下maven的optional选项的作用和用法。 1:什么作用 考虑这样的场景,A依赖B,B依赖C,正常的按照依赖的传递性,A也会间接的依赖C,但是在一些特定的场景中项目A只希望依赖B,而不依…

【洛谷】T539820 202411A Giants

题目背景 Were wide awake now our eyes are wide openWere running this world we keeping it turningWere living like Giants.Yeah Giants.Were bigger than Giants.We Giants. 节选自《Giants》。 题目描述 在《迪迪卫》中,一次魔法的能量和五个参数有关&…

pycharm分支提交操作

一、Pycharm拉取Git远程仓库代码 1、点击VCS > Get from Version Control 2、输入git的url,选择自己的项目路径 3、点击Clone,就拉取成功了 默认签出分支为main 选择develop签出即可进行开发工作 二、创建分支(非必要可以不使用&#xf…