【发布时间】:2023-03-29 06:49:01
【问题描述】:
Windows 为应用程序和 DLL 的版本信息提供资源文件。资源文件包括版本、版权和制造商等信息。
我们有一个共享库,想添加版本信息。
我们如何在 Linux 上通过共享库做到这一点?
【问题讨论】:
Windows 为应用程序和 DLL 的版本信息提供资源文件。资源文件包括版本、版权和制造商等信息。
我们有一个共享库,想添加版本信息。
我们如何在 Linux 上通过共享库做到这一点?
【问题讨论】:
Linux 使用以下策略 - 您(系统维护者)提供来自“特定”共享库文件的符号链接,如下所示:
lrwxrwxrwx 1 root root 16 2011-09-22 14:36 libieee1284.so -> libieee1284.so.3
lrwxrwxrwx 1 root root 20 2011-09-22 14:36 libieee1284.so.3 -> libieee1284.so.3.2.2
-rw-r--r-- 1 root root 46576 2011-07-27 13:08 libieee1284.so.3.2.2
这样,开发人员可以链接到 -lieee1284(任何版本的 ABI)或 libieee1284.so.3,甚至链接到特定的发行版和补丁版本 (3.2.2)
【讨论】:
处理此问题的最佳方法是使用 libtool,它会为您进行版本控制。
基本上,版本信息不是(或主要不是,我不知道)在库本身中编码,而是在其文件名中。版本号通常以三点格式给出,主版本号会随着向下 ABI 兼容性的每次中断而增加,中间版本号表示向上 ABI 兼容性中断,次要版本号表示未更改 ABI 的补丁。
就像 qdot 指出的那样,lib 目录中的符号链接提供了基本的版本控制。当前安装的开发头文件有一个没有版本号的符号链接 (libfoo.so),每个已安装的主要版本 (libfoo.so.1) 都有一个带有主号的符号链接,以及一个带有完整版本号的真实文件。通常,程序会在运行时链接到使用 libfoo.so.1,以便多个主要版本可以共存。
【讨论】:
current[:revision[:age]]。所以中间是针对补丁的,最后一个是向后兼容的程度。 libtools docs
-version-info C:R:A的效果。
简短的版本是您通过库的soname 执行此操作。阅读第 3 章http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html 以及第 3.3 章 ABI 版本控制http://www.akkadia.org/drepper/dsohowto.pdf
【讨论】: