【发布时间】:2018-05-24 17:22:57
【问题描述】:
如果我在 Docker 的 ubuntu:latest 中运行它:
root@4304dfbfa661:/# ls lib/x86_64-linux-gnu/libc* -l
-rwxr-xr-x 1 root root 1868984 Jan 15 02:51 lib/x86_64-linux-gnu/libc-2.23.so
lrwxrwxrwx 1 root root 12 Jan 15 02:51 lib/x86_64-linux-gnu/libc.so.6 -> libc-2.23.so
libc 似乎同时编号为 6 和 2-23。为什么有两个版本号?
NB libc 是(特殊的)可执行文件,运行它会给出
root@4304dfbfa661:/# ./lib/x86_64-linux-gnu/libc.so.6
GNU C Library (Ubuntu GLIBC 2.23-0ubuntu10) stable release version 2.23, by Roland McGrath et al.
因此,令人惊讶的是libc.so.6。 libc [或准确地说,glibc] 是否有与版本号无关的 soname?
编辑:澄清一下,我理解符号链接。让我感到困惑的是两种编号方案的存在。如果你看例如libstdc++,你会发现
lrwxrwxrwx 1 root root 19 Sep 11 2017 ./usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.19
-rwxr-xr-x 1 root root 995840 Aug 1 2017 ./usr/lib64/libstdc++.so.6.0.19
将foo.so.6 作为foo.so.6.0.19 的符号链接是有意义的。将foo.so.6 作为foo-2.23.so 的符号链接令人困惑......
【问题讨论】:
-
/lib/x86_64-linux-gnu/libc.so.6 -> libc-2.23.so表示“libc.so.6”是“libc-2.23.so”的符号链接。 ...(运行时版本始终为“libc.so.6”,无论版本如何。) ....请查看其他库:大多数都以一两个符号链接的形式存在于主库中图书馆。 -
@Knud Larsen >运行时版本始终是'libc.so.6',无论版本如何这就是我试图理解的......是什么决定了运行时版本?什么时候改变?参照。编辑为 q。
-
因为 'libc.so.6' 是一个符号链接,例如'libc-2.23.so' 它会改变,例如当你升级操作系统时。 .... Ubuntu 18.04 示例:
libc.so.6 -> libc-2.27.so -
@Knud Larsen 是的,明白了,但是为什么 2.23 版本的编号方案与 soname 编号方案完全不同?对比只有一种编号方案的 libstdc++... MAJOR.MINOR.PATCH。
-
约定等tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html ,,, ,,, ibm.com/developerworks/linux/library/l-dynamic-libraries/… ... 但如果你是作者,任何命名都是你的决定。甚至可以构建为
libname.so,仅此而已。 Glibc : 可以问gnu.org/software/libc
标签: libc