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)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  
 
参考资料

glibc 简介:的更多相关文章

  1. 解决Requires: libc.so.6(GLIBC_2.14)(64bit)错误解决方法

    glibc简介: glibc是GNU发布的libc库,即c运行库.glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc.glibc除了封装linux操作系统所提供的系统服 ...

  2. 内核移植和文件系统制作(3)Ramdisk简介和常见问题

    一,Ramdisk简介: Ramdisk是一种基于内存的虚拟文件系统(并非一个实际的文件系统),它将一部分固定大小(这个大小在编译内核的make menuconfig时配置)的内存当作硬盘一个分区来使 ...

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

    =====课程笔记===== 一.Linux 为何物 Linux 是一个操作系统,就像你多少已经了解的 Windows(xp,7,8)和 Max OS . Linux 也就是系统调用和内核两层,我们使 ...

  4. 1. redis简介

    一. redis简介 Redis是一种面向"键/值"对数据类型的内存数据库,可以满足我们对海量数据的读写需求. redis的键只能是字符串,redis的值支持多种数据类型: (1) ...

  5. 【转】Bootloader之uBoot简介(转)

    原文网址:http://blog.csdn.net/sadamoo/article/details/8139946 来自http://blog.ednchina.com/hhuwxf/1915416/ ...

  6. [转] Linux strace 简介

    http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html 简介 strace常用来跟踪进程执行时的系统调用和所接收的信号. 在L ...

  7. Linux升级glibc

    参考http://www.linuxidc.com/Linux/2015-04/116472.htm via 红孩儿你好 一.简介 glibc是gnu发布的libc库,即c运行库.glibc是linu ...

  8. u-boot(一)启动简介

    目录 u-boot(一)启动简介 启动概述 内部存储布局 Bootloader概述 内核启动参数 taggedlist 体验一下实际的Uboot U-boot的使用帮助 U-boot基本要求 titl ...

  9. Linux 内核引导选项简介

    Linux 内核引导选项简介 作者:金步国 连接地址:http://www.jinbuguo.com/kernel/boot_parameters.html 参考参数:https://www.cnbl ...

随机推荐

  1. MySQL系列——几个常用的mysql命令

    1:使用SHOW语句找出在服务器上当前存在什么数据库:mysql> SHOW DATABASES;2:2.创建一个数据库MYSQLDATAmysql> CREATE DATABASE MY ...

  2. Linux第二次学习笔记

    #Linux第二次实验(第三周) 学习目标 熟悉Linux系统下的开发环境 熟悉vi的基本操作 熟悉gcc编译器的基本原理 熟练使用gcc编译器的常用选项 熟练使用gdb调试技术 熟悉makefile ...

  3. 从Lumia退役看为什么WP走向没落

    前段时间决定将自己用了三年多的Lumia 800正式退役,这是我用的时间最长的手机,虽然系统上有缺陷,但是好不妨碍他成为我最有感情的一部手机.由于之前是WinPhone 开发者的关系,这部手机是微软送 ...

  4. java并发:中断一个正在运行的线程

    要使任务和线程能安全可靠地停止,并不是一件很容易的事情,java没有提供任何机制来安全地终止线程,那么我们该怎么办呢? 下面我们先来了解一下java中的中断机制: java中断机制是一种协作机制,也就 ...

  5. 怎样写 OpenStack Neutron 的 Plugin (二)

    其实上一篇博文中的内容已经涵盖了大部分写Neutron插件的技术问题,这里主要还遗留了一些有关插件的具体实现的问题. 首先,Neutron对最基本的三个资源:Network, Port 和 Subne ...

  6. 怎样写 OpenStack Neutron 的 Plugin (一)

    鉴于不知道Neutron的人也不会看这篇文章,而知道的人也不用我再啰嗦Neutron是什么东西,我决定跳过Neutron简介,直接爆料. 首先要介绍一下我的开发环境.我没有使用DevStack,而是直 ...

  7. IE10访问apache 2.4会奇慢的解决办法

    Windows版的apache 2.4. IE10访问apache 2.4会特别慢.有时Apache挂起了.只好重新开apache,但是重开后,也会好景不长,刚处理几个请求,就又变得奇慢了.Firef ...

  8. ssh 返回错误 Too many authentic authentication failures for root 的时候检查 ssh 配置

    路径 cd /etc/ssh ls -ltr sudo vi sshd_config 改为以下内容(yes): PermitRootLogin yes

  9. nth-child() 选择器

    给tabel tb1 td添加样式 #tb1 tr td:nth-child(2n+1) {/*奇数行样式*/ } #tb1 tr td:nth-child(2n) {/*偶数行样式*/ }

  10. 项目笔记---Socket Error Code翻译

    前言 在项目中为了方便调试及客户反馈,需要Socket错误数字的中文解释,MSDN上只有英文版,同时也想自己学习而且方便将来更新ErrorCode的实际发生的情景,顾有此博文. MSDN:https: ...