我最近从头开始制作了一个 Linux,现在我想删除 /tools 目录。但在冲过去之前,我跑了
ldd /bin/* | ldd /bin/* | grep '/工具'
这给了我这个
liblzma.so.5 => /tools/lib/liblzma.so.5 (0x00007fd7e82f9000)
libpthread.so.0 => /tools/lib/libpthread.so.0 (0x00007fd7e7ec3000)
libc.so.6 => /tools/ lib/libc.so.6 (0x00007fd7e7b1f000)
liblzma.so.5 => /tools/lib/liblzma.so.5 (0x00007f2ff2852000)
libpthread.so.0 => /tools/lib/libpthread.so.0 (0x00007f2ff241c000)
libc.so.6 => /tools/lib/libc.so.6 (0x00007f2ff2078000)
然后我手动检查了输出ldd
并发现
/bin/kmod: linux-vdso.so.1 (0x00007ffd71dbd000)
liblzma.so.5 => /tools/lib/liblzma.so.5 (0x00007f14721ab000)
libz.so.1 => /lib/libz.so.1 (0x00007f1471f92000)
libpthread.so.0 => /tools/lib/libpthread.so.0 (0x00007f1471d75000)
libc.so.6 => /tools/lib/libc.so.6 (0x00007f14719d1000)
/lib64/ld-linux- x86-64.so.2 (0x00007f14723d0000)
和
/bin/lsmod:
linux-vdso.so.1 (0x00007ffcc1db7000)
liblzma.so.5 => /tools/lib/liblzma.so.5 (0x00007f3cb7285000)
libz.so.1 => /lib/libz.so.1 (0x00007f3cb706c000)
libpthread.so.0 => /tools/lib/libpthread.so.0 (0x00007f3cb6e4f000)
libc.so.6 => /tools/lib/libc.so.6 (0x00007f3cb6aab000)
/lib64/ld-linux- x86-64.so.2 (0x00007f3cb74aa000)
看起来它只指的是/tools
only 的情况kmod
,lsmod
我检查了其他条目,它们都指向正确的条目。例如
/bin/lzcat:
linux-vdso.so.1 (0x00007ffdee0db000)
liblzma.so.5 => /lib/liblzma.so.5 (0x00007ff6cb537000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007ff6cb31a000) )
libc.so.6 => /lib/libc.so.6 (0x00007ff6caf76000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff6cb75c000)
请注意,这里它们都指向/lib
.
那么我应该继续吗?
答案1
或许。
输出ldd
包含二进制文件将使用的库的名称后搜索库搜索路径。如果您有一些指向您的/tools
目录的配置(例如,$LD_LIBRARY_PATH
或一个ld.so.conf
条目),请尝试删除它。如果完成此操作后ldd
没有指向您的目录,那么应该没问题。/tools
如果是这样,那么您的二进制文件可能是用一RPATH
组编译的。 AnRPATH
是存储在编译的二进制文件中的共享库的硬编码位置。它在某些边缘情况下可能很有用,但在您的情况下它绝对没有帮助。如果已设置,则可以使用一个名为的工具chrpath
来更改或删除它。