Linux共享库的组织 - notes
程序设计语言与ABI
ABI对于不同的语言来说,主要包括一些诸如函数调用的堆栈结构、符号命名、参数规则、数据结构的内存分布等方面的规则。
共享库版本命名规则
libname.so.x.y.z
name 表示库名字
x 表示主版本号
y 表示次版本号
z 表示发布版本号
相同主版本号与次版本号的共享库,不同发布版之间应完全兼容。
SO-NAME
SO-NAME 是共享库的文件名去掉次版本号和发布版本号,保留主版本号后的名字。Linux系统会为一个库(在同一个目录下)创建一个名字为SO-NAME的符号连接。 (ln -s)
这个软连接总是指向当前主版本号相同次版本号与发布版本号最新的库。
依赖于某个共享库的模块在编译链接时,其.dynamic段里存的就是SO-NAME 信息,而不是用完整的详细的库版本号。
当系统新安装一个共享库的时候,需要运行 ldconfig , ldconfig 会为其建立相应的软连接。
共享库查找过程
一个依靠动态链接的模块所依赖的库路径保存在 .dynamic 节区中, DT_NEED 类型的项表示。
更改 /etc/ld.so.conf 增加 库查找路径,但每一次修改过后,都必须运行 ldconfig,以 调整 SO-NAME 和 更新 /etc/ld.so.cache。
。