在Mac OS X中C标准库被称作libSystem。libSystem事实上是一个很大的函数库,里面包含了数个独立的BSD函数库。为了保持兼容Unix中的标准库,例如libc,会被符号链接到libSystem上。另外还有一些库是libSystem内部使用的。libSystem包含以下库
- libc – C标准库
- libdbm – 数据库操作库
- libdl – 动态链接器的API
- libinfo – 一些“info” API,例如查询当前的DNS,NIS和网络信息的API
- libkvm – 提供KVM虚拟机的API,一些实用程序例如ps会使用它
- libm – 标准数学函数库
- libpoll – 对BSD的select() syscall的包装,模拟System V的poll() syscall
- libpthread – POSIX线程库
- librpcsvc – 一个Sun的RPC服务库
libSystem内部使用的库如下
- libdyldapis – 一个动态链接器的底层API
- libkeymgr – 用于维护进程的全局状态,这个状态对所有进程的所有线程和所有动态链接库可见
- liblaunch – launchd的一些接口
- libmacho – 一个访问Mach-O文件内部信息的API
- libnotify – 允许应用通过基于命名空间的无状态通知发送事件信息
- libstreams – 实现了I/O流机制
- libunc – 创建和分派用户通知的库
libSystem还包含了一个commpage符号的对象文件。commpage是一块被映射到每一个进程地址空间的特殊内存。这块内存是共享且只读的。commpage中包含了常用的系统函数和数据。commpage的符号包含在libSystem一个特殊段下(在__commpage节的__DATA段下)。因此debugger可以使用这些符号。