首页 > 代码库 > linux 共享库版本管理

linux 共享库版本管理

原理

请看Linux 如何解决共享库的版本控制

我的理解

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