glibc 简介:

glibc

编辑

glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX通行的标准,可以想见其内容包罗万象。而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个操作系统。在 GNU/Linux 系统中,其C函式库发展史点出了GNU/Linux 演进的几个重要里程碑,用 glibc 作为系统的C函式库,是GNU/Linux演进的一个重要里程碑。

外文名
glibc
字符串处理
string
信号处理
signal
文件目录操作
direct

目录

  1. 功能实现
  2. GLIBC 的内容
  3. GLIBC 的规格
  4. 简短说明

功能实现

编辑

主要的如下:

(1)string,字符串处理

(2)signal,信号处理

(3)dlfcn,管理共享库的动态加载

(4)direct,文件目录操作

(5)elf,共享库的动态加载器,也即interpreter

(6)iconv,不同字符集的编码转换

(7)inet,socket接口的实现

(8)intl,国际化,也即gettext的实现

(9)io

(10)linuxthreads

(11)locale,本地化

(12)login,虚拟终端设备的管理,及系统的安全访问

(13)malloc,动态内存的分配与管理

(14)nis

(15)stdlib,其它基本功能

GLIBC 的内容

编辑

由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万象。而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个操作系统。以 glibc-2.2 为例,这些档案群主要包括:

1.分享函式库群:

这是 glibc 的主体,分布 /lib 与 /usr/lib 中,包括 libc 标准 C 函式库、libm 数学函式库、libcrypt 加密与编码函式库、libdb 资料库函式库、libpthread 行程多执行绪函式库、libnss 网路服务函式库 .... 等等。这些都是可分享函式库,档名都以 .so 做结尾。其中,/lib/ld*.so 是程式与函式库连结的工具。有的用于程式编译时将程式与函式库内的函式物件连结,在只支援静态连结的系统中,此连结方式就是直接将所需的物件自函式库中抽出来与程式的可执行档相连,而在支援可分享函式库的系统中,在程式编译时期的连结只是在执行档中纪录了那些函式物件是存在那个函式库档案中,等该程式开始执行时,则由另一个负责动态连结的 ld*.so 将所需的函式库连结好并执行。

一般而言,负责程式编译时期的连结器档名为 ld. so,而负责程式执行时的动态连结器档名为 ld- .so 或 ld-linux. so (在 GNU/Linux 系统中)。

函式库标头档与程式开发元件:

这些标头档档名都以 .h 为结尾,全部在 /usr/include/ 底下,其内容为函式库中各函式的宣告、巨集定义、资料物件的型别 .... 等等,这些都是程式开发者不可或缺的部分。

除此之外,在 /usr/lib/ 中还有若干 .o 与 .a 的档案,这些是程式编译过程中要连结为可执行档时所需的元件,有些则为上述可分享函式库的静态连接版本,而后者可以在某些特殊场合下需要静态连结程式时使用。

函式库说明文件:

在一般的 UNIX 系统下,这些说明文件是放在 /usr/man 或 /usr/share/man 底下,统称为 man pages,其底下还分若干章节,其中第二章 (man2) 讲的是系统呼叫,而第三章 (man3) 讲的就是 libc 标准函式库,这些都是系统开发者重要的参考资料。

而在 GNU 的系统中,除了 man pages 之外,还有一套称为 info 的文件资料系统,而且里头的说明往往比 man pages 还要详尽,这在 glibc 中也不例外。glibc 的 info 文件位于 /usr/share/info/libc. info* ,本文中有许多素材就是取自这些文件的内容。

字集转换模组与区域化资料库:

这些是与程式国际化与本土化相关的部分,主要可分成四大块: /usr/lib/gconv/ 内含大量的字集转换模组,大部分是各种字集及编码方式与系统的基底字集之间的 转换。第二块是 /usr/lib/locale,内含以系统基底字集写成的区域化资料库 (locale),像是 LC_CTYPE、LC_TIME .... 等等。第三块是

/usr/share/locale/,内含可跨平台使用的区域化资料,主要是各应用程式的信息翻译部分。而最后一块是 /usr/share/i18n/,其内容是各区域化资料库的原始码,以及系统支援的内码对应表 .... 等等。

时区资料库:

主要分别在 /usr/share/zoneinfo 底下,内含世界各地时区与格林威治时间的转换资料。

其他工具程式与设定档:

工具程式分布在 /usr/bin 与 /sbin 底下,包括一些转码与区域化资料库相关的程式如 iconv, locale, localedef 等,以及用来显示应用程式与可分享函式库相依关系的 ldd, 还有可分享函式库搜寻路径管理程序 ldconfig .... 等。而其相关的设定档则位于 /etc 底下。

disaos

03-11-03, 10:42

GLIBC 的规格

编辑

在 GNU/Linux 系统中,其 C 函式库的发展史点出了 GNU/Linux 演进的几个重要里程碑,由此可以突显出 C 函式库在系统中的地位与重要性。早期的 GNU/Linux 系统并不支援可分享函式库,因此所有的应用程式都是以静态连结的方式存于系统中。直到 1995-1996 年 libc5 问世以后,系统才开始支持 ELF 可分享函式库,同时该版的 C 函式库也创作了其他 UNIX 上大部分的功能与函式群,可谓 GNU/Linux 发展上的一大进步。

然而 libc5 在程式国际化 (I18N) 与本土化 (L10N) 方面的支持很差,故那个时候若要开发所谓中文化的程式,就非得自行创作一套标准不可。直到一两年后, GNU/Linux 换用了 GNU 所开发的 glibc-2.0 做为其 C 函式库后,其国际化与本土化的支援才开始起步,后来经历 glibc-2.1,到了现在的 2.2 版,整个多国语文的开发环境才大至成熟。

用 glibc 做为系统的 C 函式库,是 GNU/Linux 演进的一个重要里程碑。在 GNU 的计划中,开发 glibc 原本是要给他们尚未问世的核心 GNU/Hurd 用的,由于当时几乎 99% 的 GNU 系统工具已开发完成,就独缺核心 Hurd,而恰巧 Linux 核心在 Torvalds 的带领下已逐渐成熟稳定,而且可以顺利执行所有的 GNU 系统工具。故 GNU 团队便顺应 Linux 核心的特性,改写了他们的 glibc,使其可以适用于 Hurd 核心与 Linux 核心。如此,在这两个平台上就有了一致的程式开发环境,使得所有的 GNU 程式可以在这两个平台之间顺利移植。

比起过去的 libc5,glibc 系列 (一般又称之为 libc6) 除了有完整的国际化与本土化支援外,同时还符合许多标准与规格,使得在 glibc 下开发的程式可以很容易移植到其他 UNIX 平台去。这些标准包括:

ISO C:

ISO C 是 International Standard for the C programming language 的缩写,此标准明定了 C 语言的语法,标准 C 函式库应具备那些标头档、巨集定义、函式与物件 .... 等等,几乎在任何平台上的 C 语言 (包括非 UNIX 平台) 都支援此标准。

POSIX:

POSIX 是 Portable Operating System Interface for Computer Environments 的缩写,它是 ISO C 的延伸,明定了一个可移植的操作系统所应具备种种条件,其范围不只有系统函式库而已,还同时包括一些标准的工具程式、系统核心应有的特色与创作、以及在 C 函式库中某些与操作系统相关的低阶控制支援 (如系统呼叫窗口) 等等。由于 glibc 是完全按照 POSIX 的标准制作的,同时搭配了符合 POSIX 标准的 Linux 核心,故在此环境下开发的程式可以做到完全符合 POSIX 的规格。

Berkeley Unix:

Berkeley Unix 泛称柏克莱大学所开发的 UNIX 系列操作系统,包括 4.2 BSD、4.3 BSD、4.4 BSD 以及早期的 SunOS。这些系统的 C 函式库中有许多杰出的设计,但却没有在上述两个标准中,包括 select() 函式、sockets .... 等等,这些在 glibc 中都有支援。

SVID:

SVID 是 System V Interface Description 的缩写,它是一份描述 AT&T UNIX System V 系统规格的文件,它是 POSIX 标准的延伸。Glibc 创作了大部分的 SVID 规格要求,其中较重要的包括了行程之间的通?标准以及分享式记忆体 (shared memory),至于其他的部分则较不常使用。创作 SVID 主要的目的是希望可以做到与 UNIX System V 的相容与程式的可移植性。

XPG:

XPG 是 X/Open Portability Guide 的缩写,是由 X/Open Company, Ltd. 所发表,同时 X/Open 还拥有 UNIX 商标的版权。而这份规格不但是 POSIX 标准的扩充,同时也明定了一个 UNIX 操作系统所应符合的要求。其中包括了 iconv() 字集转换介面,以及部分 BSD 与 SVID 的特色。

除了上述的规格外,glibc 还内含了 GNU 特有的特色,称之为 GNU Extension。这些特色在某些情况下可以方便程式的撰写与维护,但就不见得可以移植到其他 UNIX 平台上,故在可移植性的考量下使用时必须留意。

安装下列程序: catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump 和 zic

安装下列库文件: ld. so, libBrokenLocale.[a,so], libSegFault. so, libanl.[a,so], libbsd-compat.a, libc.[a,so], libc_nonshared.a, libcrypt.[a,so], libdl.[a,so], libg.a, libieee.a, libm.[a,so], libmcheck.a, libmemusage. so, libnsl.a, libnss_compat. so, libnss_dns. so, libnss_files. so, libnss_hesiod. so, libnss_nis. so, libnss_nisplus. so, libpcprofile. so, libpthread.[a,so], libresolv.[a,so], librpcsvc.a, librt.[a,so], libthread_db. so 和 libutil.[a,so]

简短说明

编辑

catchsegv 当程序发生segmentation fault的时候, 用来建立一个堆栈跟踪。

gencat 建立消息列表。

getconf 针对文件系统的指定变量显示其系统设置值。

getent 从系统管理数据库获取一个条目。

glibcbug 建立glibc的bug报告并且email到bug报告的邮件地址。

iconv 转化字符集

iconvconfig 建立快速读取的iconv模块所使用的设置文件。

ldconfig 设置动态链接库的实时绑定。

ldd 列出每个程序或者命令需要的共享库。

lddlibc4 辅助 ldd 操作目标文件。

locale 是一个 Perl 程序,可以告诉编译器打开或关闭内建的locale支持。

localedef 编译locale标准。

mtrace...

nscd 提供对常用名称设备调用的缓存的守护进程

nscd_nischeck 检查在进行NIS+侦查时是否需要安全模式。

pcprofiledump 打印PC profiling产生的信息。

pt_chown 是一个辅助程序,帮助grantpt设置子虚拟终端的属主,用户组和读写权限。

rpcgen 产生实现RPC协议的C代码。

rpcinfo 对RPC服务器产生一个RPC呼叫。

sln 用来创建符号链接,由于它本身是静态连接的,在动态连接不起作用的时候,sln仍然可以建立符号链接。

sprof 读取并显示共享目标的特征描述数据。

tzselect 对用户提出关于当前位置的问题,并输出时区信息到标准输出。

xtrace 通过打印当前执行的函数跟踪程序执行情况。

zdump 显示时区。

zic 时区编译器

ld. so 帮助动态链接库的执行。

libBrokenLocale 帮助程序处理破损locale,如Mozilla。

libSegFault 处理 segmentation fault 信号,试图捕捉segfaults。

libanl 异步名称查询库。

libbsd-compat 为了在linux下执行一些BSD程序,libbsd-compat提供了必要的可移植性。

libc 是主要的C库--常用函数的集成。

libcrypt 加密编码库。

libdl 动态连接接口。

libg g++的运行时。

libieee IEEE浮点运算库。

libm 数学函数库。

libmcheck 包括了启动时需要的代码。

libmemusage 帮助 memusage 搜集程序运行时内存占用的信息。

libnsl 网络服务库。

libnss* 是名称服务切换库,包含了解释主机名,用户名,组名,别名,服务,协议等等的函数。

libpcprofile 帮助内核跟踪在函数, 源码行和命令中CPU使用时间。

libpthread POSIX 线程库。

libresolv 创建,发送及解释到互联网域名服务器的数据包。

librpcsvc提供RPC的其他服务。

librt 提供了大部分的POSIX.1b实时扩展的接口。

libthread_db 对建立多线程程序的调试很有用。

libutil 包含了在很多不同的 Unix程序中使用的“标准”函数。

Glibc 安装依赖关系

Glibc 依赖于: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed, Texinfo[1]  .

C 编程语言

函式库
C 标准函式库 ? glibc Dietlibc
uClibc Newlib EGLIBC
Bionic    
 
特性
String Syntax Preprocessor
Variable types and declarations Functions  
 
延伸的相关编程语言
C++ Objective-C D
C#    
 
C 与其他的编程语言
Compatibility 运算子 Comparison of Pascal and C
C to Java byte-code compiler    
 
编译器
Borland Turbo C Clang GCC
LCC Pelles C PCC
TCC Visual C++ C++/CLI
C++/CX Watcom C/C++ compiler  
 
参考资料
时间: 2024-10-05 09:30:58

glibc 简介:的相关文章

嵌入式 Linux根文件系统移植(一)——Linux文件系统简介

嵌入式 Linux根文件系统移植(一)--Linux文件系统简介 本文对文件系统分析的代码来源于linux 2.6.35.7版本. 一.文件系统的体系结构 文件系统是对存储设备上的数据和元数据进行组织的机制,便于用户和操作系统的交互.Linux支持多种文件系统,文件系统接口实现为分层的体系结构,将用户接口层.文件系统实现和操作存储设备的驱动程序分隔开.Linux文件系统的体系结构如下: 用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C库(glibc),为文件系统调用(打开.读取.

Linux 内核开发——内核简介

内核简介 Linux 构成 Linux 为什么被划分为系统空间和内核控件 隔离核心程序和应用程序,实现对核心程序的保护,如保护操作系统本身的保护. 什么内核空间,用户空间 内核空间和用户空间是程序运行的两种不同的状态,Linux对自身软件系统进行了划分,一部分核心的软件独立于普通的软件,拥有特权级别,能够访问平台的所有硬件和资源,称为"内核空间".而普通的软件运行在"用户空间",它只拥有有限的系统资源,不能直接访问内核空间和硬件资源. 将系统分为"内核空间

Linux升级Glibc

一.简介 glibc是gnu发布的libc库,即c运行库.glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc.glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现... 本文介绍Glibc升级方法,参考:http://www.cppblog.com/prayer/archive/2009/07/22/90836.html 二.升级 步骤如下: wget http://ftp.gnu.org/gnu/glibc/gli

Linux简介及Linux学习路线图

一.Linux 为何物 Linux 就是一个操作系统,就像你多少已经了解的 Windows(xp,7,8)和 Max OS ,至于操作系统是什么,就不用过多解释了,如果你学习过前面的入门课程,应该会有个基本概念了,这里简单介绍下操作系统在整个计算机系统中的角色. 我们的 Linux 也就是系统调用和内核那两层,当然直观的来看,我们使用的操作系统还包含一些在其上运行的应用程序,比如文本编辑器,浏览器,电子邮件. 二.Linux 历史简介 操作系统始于二十世纪 50 年代,当时的操作系统能运行批处理

【Linux基础入门】1、Linux系统简介

1.1 Linux为何物? Linux 就是一个操作系统,就像你多少已经了解的 Windows(xp,7,8,10)和 Mac OS .这里简单介绍一下操作系统在整个计算机系统中的角色.我们的应用体系主要由四层构成,分别为:硬件(最大层).内核.系统调用和应用程序,我们的 Linux 也就是系统调用和内核那两层.当然直观地看,我们使用的操作系统还包含一些在其上运行的应用程序,比如文本编辑器.浏览器.电子邮件等. 1.2 Linux历史简介 操作系统始于二十世纪五十年代,当时的操作系统能运行批处理

Bootloader之uBoot简介

本文转载自:http://blog.ednchina.com/hhuwxf/1915416/message.aspx 一.Bootloader的引入 从前面的硬件实验可以知道,系统上电之后,需要一段程序来进行初始化:关闭 WATCHDOG.改变系统时钟.初始化存储控制器.将更多的代码复制到内存中等等.如果它能将操作系统内核(无论从本地,比如Flash:还是从远端, 比如通过网络)复制到内存中运行,就称这段程序为Bootloader. 简单地说,Bootloader就是这么一小段程序,它在系统上电

Nagios简介与安装(1)

搭建Nagios实在是一个繁杂的过程,首先需要读者有Linux基础,最为重要的是要花费大量的精力和时间,还有就是耐心和细心.我主要是参考网上这篇文章,觉得写的非常好. 原文: http://www.cnblogs.com/mchina/archive/2013/02/20/2883404.html http://www.ibm.com/developerworks/cn/linux/1309_luojun_nagios/ 一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有

1.1Linux 系统简介(学习过程)

=====课程笔记===== 一.Linux 为何物 Linux 是一个操作系统,就像你多少已经了解的 Windows(xp,7,8)和 Max OS . Linux 也就是系统调用和内核两层,我们使用的操作系统还包含一些在其上运行的应用程序,比如文本编辑器,浏览器,电子邮件. 二.Linux 历史简介 操作系统始于二十世纪 50 年代,当时的操作系统能运行批处理程序.批处理程序不需要用户的交互,它从文件或者穿孔卡片读取数据,然后输出到另外一个文件或者打印机.二十世纪六十年代初,交互式操作系统开

Linux 内核引导参数简介

概述 内核引导参数大体上可以分为两类:一类与设备无关.另一类与设备有关.与设备有关的引导参数多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导参数.比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导参数,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导参数说明.大多数参数是通过"__setup(... , ...)"函数设置的,少部分是通过"early_param(..