【问题标题】:installed shared library version number does not match LT_VERSION_INFO安装的共享库版本号与 LT_VERSION_INFO 不匹配
【发布时间】:2015-12-19 08:40:56
【问题描述】:

共享库的 libtool 版本号通过 configure.ac 设置 LT_VERSION_INFO="lt_current:lt_revision:lt_age" 但是当我将其设置为0:1:0 make install 时,会安装lib..so.0.0.1,而当我将其设置为3:2:1 时,则会安装lib..so.2.1.2。这似乎不对。如果是,有人可以解释发生了什么吗?否则,可能有什么问题? libtool 版本为 2.4.2。

我熟悉 libtool 版本与发布版本不同的事实。这不是这里的问题。

【问题讨论】:

    标签: shared-libraries gnu autotools libtool


    【解决方案1】:

    您可能会发现this explanation and example 很有用;网上还有其他类似的,但这个最后有一个实用的工作流程(就像 libtool 的文档一样)。因此,考虑到这一点,让我们来看看-version-info 的示例:

    0:1:0

    libtool 说:对于 API 0,我对源文件进行了一项更改,并且没有对 API 进行向后兼容的添加。

    现在libtool 将共享库构建过程从真正的平台工具中抽象出来,这样您就可以将一个 autotools 构建的 tarball 放到系统上并输入 ./configure && make && make install 并有合理的机会在最后运行软件建造。有些平台会关心-version-info 的内容(例如Linux,我有点假设您正在构建它,所以您会看到libfoo.so.0.0.1),而其他平台则不会(例如Android,所以您将见libfoo.so),还有其他人有点关心。由于libtool 必须跨越不同的平台,他们必须想出一个方案,让他们能够在所有他们的目标平台上计算正确的值。这就是编号有点不直观的原因。

    所以在 Linux 上,“0:1:0”转换为 libfoo.so.0.0.1,因为链接器使用 major.minor.patchlevel 用于区分库的方案。在另一个操作系统上,这可能不同或不存在。

    3:2:1

    libtool 说:对于 API 2,我对 API 进行了一项向后兼容的更改,以及随后的两项源代码更改。您通过 (current - age) = (3 - 1) = 2 获得 API 编号。您知道自 revision 以来您有后续更改在任何 API 更改时重置为 0(并且 current 会增加)。等等在 Linux 上,这意味着你会得到libfoo.so.2.1.2

    【讨论】:

      猜你喜欢
      • 2018-10-07
      • 2018-05-26
      • 2021-07-11
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多