Ubuntu Linux---GNU libc库

除了libc和libm库,UNIX系统库没有其他标准的命名规范 。Linux上的一些系统库可能和UNIX平台上库的名称不同,这就需要知道Linux上各库所包含和支持的功能 。表3-2根据所支持的功能列举了一些Linux系统库 。
;
;下面列出了GNU libc库所包含的库文件以及对应的描述(注释5):
- ld.so,为使用了共享库的可执行程序提供的一个辅助程序;
- libBrokenLocal.[a,so],Mozilla等应用程序用以解决被破坏的locale的库文件;
- libSegFault.so,段错误信号处理器,它试图捕获段错误信号 。
- libanl.[a,so],异步的名称查询库 。
- libbsd-compat.a,在Linux上运行BSD程序时需要的库 。
- libc.[a,so],最主要的C库(常用的C函数的集合) 。
- libcrypt.[a,so],加密库 。
- libdl.[a,so],动态链接接口库 。
- libg.a,g运行时库 。
- libieee.a,IEEE浮点运算库 。
- libm.[a,so],数学库 。
- libmcheck.a,包含启动时运行的代码 。
- libmemusage.so,memusage用来收集应用程序内存使用情况的库 。
- libnsl.a,网络服务库 。
- libnss_comkpat.so,libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so,NSS(Name Service Switch)库,包含解析主机名、用户名、组名、别名、服务、协议等的函数 。
- libpcprofile.so,包含一些跟踪统计代码行消耗CPU时间的概要分析(profiling)函数 。
- libpthread.[a,so],POSIX线程库 。
- libresolv.[a,so],包含为网络域名服务器创建、发送、解释网络包的函数 。
- librpcsvc.a,包含提供各种RPC服务的函数 。
- librt.[a,so],包含POSIX1.b实时扩展所定义的大部分接口函数 。
- libthread_db.so,包含开发多线程程序调试器的函数 。
- libutil.[a,so],包含常用的UNIX工具使用的“标准函数 。
上面这些库大多位于/usr/lib目录,也有一些在/lib目录下,例如libSegFault.so.
[1][2];[3];[4];[5];下一页
;3.1.1 glibc遵循的标准
GNU glibc发布了一个描述其所遵循的标准的报告(注释6) 。该报告同时也列出了GNU libc需要改进的地方 。写作本书时,该报告显示GNU libc通过了FIPS POSIX90、POSIX96、UNIX98、ANSI、C89/99,和ISO9899标准的头文件一致性检查 。所有主要Linux发行版的glibc也都遵循LSB规范 。
3.2 GNU科学库
把进行高性能计算的应用程序移植到Linux上需要一个支持库,该库要与UNIX平台上的科学库非常匹配 。Linux上类似的库叫GNU科学库(GNU Scientific Library,简写作GSL) 。GSL是一系列数学运算例程的集合 。这些例程是用C语言重新编写的,并且给编程人员提供了一个新式的API模式---允许编程人员为各高级语言编写包裹函数(wrapper) 。这些源代码使用的是GPL发布许可 。
GNU科学库包含了数学运算领域的很多内容 。表3-3列出了GNU科学库提供的例程 。
;这些例程的用法在GSL手册(注释7)中有详尽的描述,包括函数的定义、示例程序,以及函数实现的算法所引用的论文 。
3.3 共享库
我们所移植过的大多数应用程序都使用了共享库 。然而,不同的操作系统在创建和命名共享库时却不尽相同 。Linux上,共享库可以有不同的文件扩展名,例如,共享库可以以.so或.so.1.0结束 。以.so.x.x(x为数字)结尾的共享库叫版本化库 。第一个数字代表大版本号,第二个数字代表小版本号 。有些情况下,共享库的扩展名还可以是.so.x.x.x(x为数字)的形式,这里最后一个数字代表发布号,并且是可选的 。下面给出了共享库文件名的格式:
(代码)p58 第11行,lib.so...
大版本号、小版本号,以及发布号的变化反映了对共享库所作的不同类型的修改 。下面是对增大大版本号、小版本号和发布号的一些指导:

推荐阅读