shared-libraries - 如何控制 Linux 上的共享库版本问题?

标签 shared-libraries

例如,我创建了一个名为 的共享库。 libXXX.so.0.0.0 名称为 libXXX.so.0 .那么,我需要创建一个名为 的符号链接(symbolic link)吗? libXXX.so.0 让它指向真正的共享库?或者我只需要创建一个名为 的符号链接(symbolic link)吗? libXXX.so ?

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

  • 如果我在系统库路径上安装共享库,例如/lib/usr/lib ,如何更新符号链接(symbolic link)?使用
    ldconfig ?
  • 如果我在当前本地文件夹上安装共享库,如何
    更新符号链接(symbolic link)?

  • 顺便说一句,如何控制 Makefile 中的版本问题?我的意思是我是否需要添加一些命令,例如 ln -s ldconfig ?

    最佳答案

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

    如果您希望人们能够构建链接到该库的程序,那么还要创建一个名为 libXXX.so 的符号链接(symbolic link)。指向libXXX.so.0 .

    libXXX.so.0 符号链接(symbolic link)将被程序加载器使用,因为这是程序将要查找的 soname。
    libXXX.so链接器在构建程序时将使用符号链接(symbolic link),因为按照历史惯例,链接器就是这样工作的。

    Besides, what if I update the library to libXXX.so.0.0.1?



    然后你重新制作 libXXX.so.0符号链接(symbolic link),使其指向 libXXX.so.0.0.1 .没有其他东西需要改变。由于libXXX.so符号链接(symbolic link)指向 libXXX.so.0它也会自动指向新库。

    how to update the symlink?



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

    关于shared-libraries - 如何控制 Linux 上的共享库版本问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10866402/

    相关文章:

    c++ - CMake 将依赖项复制到可执行输出路径

    c - lua51 c 共享库问题

    c - 将共享库链接到静态库 : must the static library be compiled differently than if an application were linking it?

    qt - 如何从 C++ 函数/Qt 方法按需加载动态库

    c - 图书馆设计方法

    azure - 是否可以将 Databricks 笔记本安装到类似于库的集群中?

    c++ - 在 Linux 中构建共享库时如何使链接器因 undefined reference 而失败

    linux - 加载共享库时,它是否可能引用当前二进制文件中的某些内容?

    无法链接到 macOS 上的 C 标准库

    linux - 未找到 ldd 库