gnulib+glib+glibc+libc的不同

本文介绍了C语言中的三种重要库:glibc、glib和libstdc++,分别解释了它们的作用及应用场景。glibc作为C语言的基本库,glib则扩展了C语言的功能并提供了丰富的数据结构,而libstdc++则是C++的标准I/O库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:http://blog.sina.com.cn/s/blog_5420e00001016r8r.html

libc指C函数库,这是一个通称

GNU libc就是glibcglibc 是提供系统调用和基本函数的 C 库,比如open, malloc, printf等等。所有动态链接的程序都要用到它。是GNU开发的C库(GNU libc)。
glibc2是glibc的version 2(第二版)。

glib是Gtk +库和Gnome的基础。glib可以在多个平台下使用,比如Linux、Unix、Windows等。GLib为许多标准的、常用的C语言结构提供了相应的替代物。GLib是一组较高层的函数库,其中定义了好多有用的数据结构,如单(双)向链表,可变长的数组等Hash,线程池等有用的东西,在linux中glib是建立在glibc之上的。使用GLib库的程序都应该包含GLib的头文件glib.h。

glib2是glib的第二版。

libstdc++是C++标准I/O库,任何使用GNU的C++编译器G++来编译的C++程序都可以使用libstdc++,它包括了常规的C++例程,比如stl,在linux下,这个库一般放在/usr/lib目录下。

 

有个错误的观点:认为Glib是GNU的东东.(因为前面那个"g"),而Glibc是Glib的一个子集.
    其实,Glib和Glibc基本上没有太大的联系,可能唯一的共同点就是他们都是UNIX下C编程调用的库而已. Glib是GTK+调用的底层核心库.(GTK+由开发GIMP的一些工具包集合发展而来).GIMP和Gnome这样的图形界面程序都是基于GTK+的.
    大家都知道C本身缺少数据结构,和一些重要的处理函数,C本身最复杂的数据结构也就是数组了.那么当你需要一个数据结构的话就自己得定义.幸好前人已经帮我们完成这个工作.他们把这写常用的数据结构和处理方法包装成一个库.其中之一就是Glib了.Glib中 定义了很多有用的数据结构.如数组(长度可变),单(双)向链表,hash表,队列,还有关系(学过关系型数据库的都应该知道这个概念).一些常用的处理 方法如:字符串的处理,标准输出(g_print等),错误输出,日志记录,为了portable而定义的一些基本数据类型(gint,gchar, guint等)极其他们的限制,还有事件循环,线程,IO操作等.
    GTK+和如今的多数GUI编程语言一样,基于消息传递与事件处理(GTK+里用信号,和消息的本质是一样的,只不过是前人帮我们定义好了而已).象 JAVA一样,GTK+中为我们定义好了容器,面板,组件等器件,调用就行了.而他本身又调用了Glib的好多东西.
    Glibc是GNU开发的C库,和libc中好多东西重复.

=====================================================================================

这个应该理解成:三者各自适合不同的开发场景;相似的例子:什么时候项目用C开发,什么项目又可以基于JVM用JAVA开发;

1. glibc 
[ http://www.gnu.org/s/libc/ ]
任何类unix系统都需要一个C库,功能上包括系统调用与基本C函数。可以理解成实现C函数库一个最基本的库,也就是CRT(C Runtime C运行时库)。不同的平台上都各自有自己的C运行库,windows的包含在VC里;
重点:C语言基本库

2. gnulib
[ http://www.gnu.org/software/gnulib/ ]
GUN组织有一个美好的愿景:只要是遵守GNU POSIX标准开发的软件,可以运行在任何GNU POSIX标准操作系统上。当你需要开发POSIX标准的软件时,你自然先需要这么一个标准库,这就是GNULIB;现实中,各操作系统所提供的开发API甚至C标准函数都不是完全一样的。
重点:POSIX标准

3. glib
[ http://www.gtk.org/ ]
A. 理解GLib的关键在于了解它的历史,简单说来,GLib来自于GTK,GTK源自于GIMP.GIMP是GNU Image Manipulation Program(GNU图像处理程序)的缩写;
B. Glib是什么,有什么?Glib的开发并不与glibc冲突,Glib延伸了C的功能,添加了许多数据结果,添加了一些开发图形系统需要的一些消息处理机制...,它是GIMP组织在实际开发中不断地提炼出来的产物。
重点:GTK开发


### 如何进行 Glibc 升级 #### 1. 准备工作 在升级 Glibc 前,需确认当前系统的环境配置以及现有版本的信息。可以通过以下命令检查当前系统上已安装的 Glibc 版本: ```bash ldd --version ``` 此命令会显示类似于 `GNU libc` 的版本号[^2]。 #### 2. 下载目标版本的 Glibc 源码包 访问官方资源站点下载所需的 Glibc 版本源码文件。例如,在 Node.js 非正式构建页面中可能找到相关依赖信息[^1]。通常情况下,推荐从 GNU 官方网站获取最新的稳定版 Glibc 源码压缩包。 #### 3. 编译并安装新版本 Glibc 以下是基于 CentOS 系统的一般流程: - **解压源码** 将下载好的 tarball 文件解压到指定目录下。 ```bash tar -xvf glibc-<version>.tar.gz cd glibc-<version> ``` - **创建编译目录** 不建议直接在源代码根目录内完成整个构建过程,因此先新建一个子文件夹用于存放生成物。 ```bash mkdir build && cd build ``` - **运行配置脚本** 使用 `../configure` 脚本来初始化项目设置,并指明最终安装路径(如 `/opt/glibc-new-version`)。注意确保 `$PATH` 中存在可用的 C 编译器;如果没有,则需要先行安装 GCC 工具链。 ```bash ../configure --prefix=/opt/glibc-new-version ``` 如果遇到缺少必要工具的情况,请参照提示补充相应 RPM 包管理器组件[^4]。 - **启动实际编译环节** 利用多线程加速方式加快进程速度(假设 CPU 支持四个逻辑核心)。 ```bash make -j4 ``` - **部署成果** 创建必要的链接结构以便后续加载动态共享对象时能够正常定位到新的库位置。 ```bash sudo mkdir -p /opt/glibc-new-version/etc/ sudo cp -r /etc/ld.so.conf* /opt/glibc-new-version/etc/ sudo make install ``` #### 4. 测试与验证 为了保证替换后的功能一致性,可尝试执行简单的程序调用来测试新版 Glibc 是否生效。 ```bash /opt/glibc-new-version/bin/ldd --version ``` 如果输出结果显示的是预期的新版本号,则说明更新成功[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值