如何在Linux上控制共享库版本问题?

时间:2012-06-02 22:25:48

标签: shared-libraries

例如,我创建了一个名为 libXXX.so.0.0.0 的共享库,其soname为 libXXX.so.0 。那么,我是否需要创建一个名为 libXXX.so.0 的符号链接并让它指向真正的共享库?或者我只需要创建一个名为 libXXX.so 的符号链接?

此外,如果我将库更新为 libXXX.so.0.0.1 怎么办?

  1. 如果我在系统库路径上安装共享库,请执行此操作 /lib/usr/lib,如何更新符号链接?运用 LDCONFIG

  2. 如果我在当前本地文件夹上安装共享库,该怎么做 更新符号链接?

  3. BTW,如何控制Makefile中的版本问题?我的意思是我是否需要添加一些命令,例如 ln -s ldconfig

1 个答案:

答案 0 :(得分:3)

是的,创建一个名为libXXX.so.0的符号链接,指向libXXX.so.0.0.0

如果您希望人们能够构建与此库链接的程序,那么还要创建一个名为libXXX.so的符号链接,指向libXXX.so.0

程序加载器将使用libXXX.so.0符号链接,因为这是程序将要查找的soname。

链接器在构建程序时将使用libXXX.so符号链接,因为根据历史惯例,链接器的工作方式如何。

  

此外,如果我将库更新为libXXX.so.0.0.1

,该怎么办?

然后重新制作libXXX.so.0符号链接,使其指向libXXX.so.0.0.1。没有什么需要改变。由于libXXX.so符号链接指向libXXX.so.0,它将自动指向新库。

  

如何更新符号链接?

如果您使用某些打包系统(RPM,...)安装新库,则使用打包系统提供的任何功能来管理符号链接。如果您只是使用脚本或Makefile节,那么只需rm -f旧的符号链接和ln -s新的符号链接。