库技术 - Linux 库详解(12 页)Good is good, but better carries it
精益求精,善益求善
Linux 库详解1 库基本概念1
1 库的分类 有两种说法,假如熟悉 WIN 平台下的 DLL,信任不难理解: 库可以有三种使用的形式:静态、共享和动态
静态库的代码在编译时就已连接到开发人员开发的应用程序中,而共享库只是在程序开始运行时才载入,在编译时, 只是简单地指定需要使用的库函数
动态库则是共享库的另一种变化形式
动态库也是在程序运行时载入,但与共享库不同的是,使用的库函数不是在程序运行开 始,而是在程序中的语句需要使用该函数时才载入
动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其它程序使用
由于共享库和动态库并没有在程序中包括库函数的内容,只是包含了对库函数的引用,因此代码的规模比较小
Linux 下的库文件分为共享库和静态库两大类,它们两者的差别仅在程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的
区分库类型最好的方法是看它们的文件后缀,通常共享库以
so(Shared Object 的缩写)结尾,静态链接库通常以
a 结尾(Archive 的缩写)
在终端缺省情况下,共享库通常为绿色,而静态库为黑色
已经开发的大多数库都实行共享库的方式
ELF 格式的可执行文件使得共享库能够比较容易地实现,当然使用旧的 a
out 模式也可以实现库的共享
Linux 系统中目前可执行文件 的标准格式为 ELF 格式
a 的是为了支持较老的 a
out 格式的可执行文件的
so 的是支持 elf 格式的可执行文件的库
a 是静态库文件,可以用 ar 命令生成
so 是动态库文件,编译时加上指定的选项即可生成,具体选项看相应的系统文档了
2 库的命名规则GNU 库的使用必须遵守 Library