如何找出共享库是否从 (zlib) 链接/请求?

问题描述

我正在尝试清理一个 cmake 项目以删除依赖项,但我一直在删除 zlib。该项目创建了两个共享库 a.so 和 b.so,其中 b.so 在构建时链接 a.so。当调用“ldd liba.so”时,libz 不存在,我得到的只是:

linux-vdso.so.1 (0x00007ffff6e49000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f481aac0000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f481a720000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f481a500000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f481a100000)
/lib64/ld-linux-x86-64.so.2 (0x00007f481b600000)

但是在链接“libb”之后:

/usr/bin/c++ -fPIC -O2 -g -DNDEBUG  -shared -Wl,-soname,libb.so -o libb.so ...o obj files... -Wl,liba.so

我现在自动获得 libz 链接

ldd libb.so
linux-vdso.so.1 (0x00007fffe694a000)
liba.so => liba.so (0x00007fb46472f000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fb4640d0000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb463d30000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb463b10000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb463710000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fb4634e0000)   <<<<<<<<<<<
/lib64/ld-linux-x86-64.so.2 (0x00007fb465000000)

当我在“liba”中跳过链接时,zlib 不存在,因此在将“liba”与“libb”链接时它被拉进来。任何地方都没有对 zlib 的依赖,所以我不知道它来自哪里或为什么。有什么方法可以检查 lib 可能从哪里被拉入?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)