摘要:和luster学习在Linux创建库函数
共享函数库
共享函数库中的函数是在当一个可执行程序在启动的时候被加载如果一个共享函数库正常安装所有的程序在重新运行的时候都可以自动加载最新的函数库中的函数对于Linux系统还有更多的可以实现的功能
o 升级了函数库但是仍然允许程序使用老版本的函数库 o 当执行某个特定程序的时候可以覆盖某个特定的库或者库中指定的函数 o 可以在库函数被使用的过程中修改这些函数库
一些约定
如果你要编写的共享函数库支持所有有用的特性你在编写的过程中必须遵循一系列约定你必须理解库的不同的名字间的区别例如它的soname和real name之间的区别和它们是如何相互作用的你同样还要知道你应该把这些库函数放在你文件系统的什么位置等等下面我们具体看看这些问题
共享库的命名
每个共享函数库都有个特殊的名字称作sonameSoname名字命名必须以lib作为前缀然后是函数库的名字然后是so最后是版本号信息不过有个特例就是非常底层的C库函数都不是以lib开头这样命名的
每个共享函数库都有一个真正的名字(real name)它是包含真正库函数代码的文件真名有一个主版本号和一个发行版本号最后一个发行版本号是可选的可以没有主版本号和发行版本号使你可以知道你到底是安装了什么版本的库函数
另
外还有一个名字是编译器编译的时候需要的函数库的名字这个名字就是简单的soname名字而不包含任何版本号信息
管理共享函数库的关键是区分好这些名字当可执行程序需要在自己的程序中列出这些他们需要的共享库函数的时候它只要用soname就可以了反过来当你要创建一个新的共享函数库的时候你要指定一个特定的文件名其中包含很细节的版本信息当你安装一个新版本的函数库的时候你只要先将这些函数库文件拷贝到一些特定的目录中运行ldconfig这个实用就可以Ldconfig检查已经存在的库文件然后创建soname的符号链接到真正的函数库同时设置/etc/ldsocache这个缓沖文件这个我们稍后再讨论
Ldconfig并不设置链接的名字通常的做法是在安装过程中完成这个链接名字的建立一般来说这个符号链接就简单的指向最新的soname或者最新版本的函数库文件最好把这个符号链接指向soname因为通常当你升级你的库函数的后你就可以自动使用新版本的函数库勒
我们来举例看看
/usr/lib/libreadlineso 是一个完全的完整的sonameldconfig可以设置一个符号链接到其他某个真正的函数库文件例如是/usr/lib/libreadlineso同时还必须有一个链接名字例如/usr/lib/libreadlineso 就是一个符号链接指向/usr/lib/libreadlineso
待续
luster(cnhwang@ustcedu)