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. Jenkins进阶系列之——01使用email-ext替换Jenkins的默认邮件通知

    1 简述 众所周知,Jenkins默认提供了一个邮件通知,能在构建失败.构建不稳定等状态后发送邮件.但是它本身有很多局限性,比如它的邮件通知无法提供详细的邮件内容.无法定义发送邮件的格式.无法定义灵活 ...

  2. MATLAB仿真总结

    MATLAB仿真过程中,编写MATLAB代码的时候犯了很多错误,做了很多蠢事.记录下自己犯错的点点滴滴,并引以为戒.使用MATLAB版本为2014a,以下内容如有不当还请指正. 1. 仿真开始前清理工 ...

  3. 解决The current branch is not configured for pull No value for key branch.master.merge found in confi

    1.在本地工程目录找到config文件(我的是在E:\rocket\rocket\.git): 2.修改config文件内容为: [core] repositoryformatversion = fi ...

  4. EF实体框架之CodeFirst六

    上午的时候把复杂类型学习了一下,想着趁着周六日把Code First学习完,所以下午还是把Code First中的关系学习下.在数据库中最重要的恐怕就是E-R图了,E-R体现了表与表直接的关系.使用C ...

  5. xsd、wsdl生成C#类的命令行工具使用方法

    1.xsd生成C#类命令 示例:xsd <xsd文件路径> /c /o:<生成CS文件目录> <其他参数> 参数说明: /c 生成为cs文件,/d 生成DataSe ...

  6. session放到mongo里边

    为了session的共享和保存,常常把session放数据库里边,但是很多时候都放redis里边,今天看了一个放Mongo中的记录下,说不懂什么时候就用到了. app.use(session({ se ...

  7. Linq表达式开窍

    static IQueryable<T> GetPageList<T,TKey>(Expression<Func<T,bool>> whereLambd ...

  8. 配置域主DNS服务器

    一.DNS服务器的类型 ①Primary DNS Server(Master) 一个域的主服务器保存着该域的zone配置文件,该域所有的配置.更改都是在该服务器上进行,本篇随笔要讲解的也是如何配置一个 ...

  9. Android的开发环境的发展演变

    1.Android的开发环境: 之前大家都是安装eclipse,然后再下载安装sdk等插件,还需要配置比较麻烦.不过2013年,有了新的选择,在I/O大会上,谷歌推出新的Android开发环境——An ...

  10. JS模式:Mixin混合模式,=_=!就是常见的Object.create()或者_extend()

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...