최근에 처음부터 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
유일한 사례만을 참조하는 것 같습니다 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
세트로 컴파일되었을 것입니다. An은 RPATH
컴파일된 바이너리에 저장된 공유 라이브러리의 하드코드된 위치입니다. 일부 극단적인 경우에는 유용할 수 있지만 귀하의 경우에는 확실히 도움이 되지 않습니다. 설정된 경우 라는 도구를 사용하여 chrpath
변경하거나 제거 할 수 있습니다.