libc.so.6 和 liblsp.so 之间的循环引用?
Circular reference between libc.so.6 and liblsp.so?
▶ldd /lib/x86_64-linux-gnu/libc.so.6
linux-vdso.so.1 (0x00007fff2b856000)
/lib/$LIB/liblsp.so => /lib/lib/x86_64-linux-gnu/liblsp.so (0x00007f472effc000)
/lib64/ld-linux-x86-64.so.2 (0x00007f472f3f5000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f472efd5000)
▶ldd /lib/lib/x86_64-linux-gnu/liblsp.so
linux-vdso.so.1 (0x00007ffe305ee000)
/lib/$LIB/liblsp.so => /lib/lib/x86_64-linux-gnu/liblsp.so (0x00007f28eea81000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f28eea5a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f28ee868000)
/lib64/ld-linux-x86-64.so.2 (0x00007f28eee8d000)
我们可以在libc.so.6 和liblsp.so 之间找到一个循环引用。它是如何工作的?
How does it works?
libc.so.6
并不 真的 依赖于 liblsp.so
。您可以使用 readelf -d /lib/x86_64-linux-gnu/libc.so.6 | grep NEEDED
.
来验证这一点
ldd
显示它的原因是它列在您的 /etc/ld.so.preload
. 中
- 正如 Nate Eldredge 评论的那样,这个“循环”并不重要——加载程序需要加载依赖库尚未加载。如果一个库已经加载,加载器简单地增加它的引用计数。
▶ldd /lib/x86_64-linux-gnu/libc.so.6
linux-vdso.so.1 (0x00007fff2b856000)
/lib/$LIB/liblsp.so => /lib/lib/x86_64-linux-gnu/liblsp.so (0x00007f472effc000)
/lib64/ld-linux-x86-64.so.2 (0x00007f472f3f5000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f472efd5000)
▶ldd /lib/lib/x86_64-linux-gnu/liblsp.so
linux-vdso.so.1 (0x00007ffe305ee000)
/lib/$LIB/liblsp.so => /lib/lib/x86_64-linux-gnu/liblsp.so (0x00007f28eea81000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f28eea5a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f28ee868000)
/lib64/ld-linux-x86-64.so.2 (0x00007f28eee8d000)
我们可以在libc.so.6 和liblsp.so 之间找到一个循环引用。它是如何工作的?
How does it works?
libc.so.6
并不 真的 依赖于liblsp.so
。您可以使用readelf -d /lib/x86_64-linux-gnu/libc.so.6 | grep NEEDED
.
来验证这一点ldd
显示它的原因是它列在您的/etc/ld.so.preload
. 中
- 正如 Nate Eldredge 评论的那样,这个“循环”并不重要——加载程序需要加载依赖库尚未加载。如果一个库已经加载,加载器简单地增加它的引用计数。