原理
我的理解
- linux在系统内部将用到的共享库版本都保留下来,并没有覆盖。(不同soname)
- 调用程序和共享库在链接的时候已经记录下来了共享库的soname。
- libxx.so文件一般只是一个软链接。只是为了与gcc命令参数-lxx 中的xx名称一致。实际中可以在不同目录创建相同名字的libxx.so链接到不同soname的共享库。gcc -lxx使用-L参数指定不同目录位置,实现使用不同版本的共享库链接。在链接完成之后,libxx.so就失去了他的作用。因为加载共享库时直接查找soname。
- 实际中发现一个奇怪的现象:例如将soname为libxx.so.1的软链接拷贝到/usr/lib64 或/lib64文件夹下,其文件属性发生了变化:不再是软链接了,而是一个regular file。
- 基本就是这样。总算明白了linux里面libxx.so后面的那串或短或长的数字是干什么的了……
- 生成共享库时要注意添加参数指明其soname: -Wl,-soname=libxx.so.1 其中-Wl,后面的东东是链接时带上的参数K/V。
- 没了。
linux 共享库版本管理
时间: 2024-10-03 21:54:16