본문 바로가기
리눅스

ldd (Unix)

by 다움위키 2024. 11. 27.
Original article: w:Ldd (Unix)

 

ldd (List Dynamic Dependencies: 동적 종속성 나열)는 명령줄에 지정된 각 프로그램이나 공유 라이브러리에 필요한 공유 라이브러리를 출력하는 *nix 유틸리티입니다. 그것은 Roland McGrathUlrich Drepper에 의해 개발되었습니다. 만약 어떤 프로그램에 공유 라이브러리가 누락되면, 해당 프로그램은 실행되지 않습니다.

Introduction

보통 이런 도구는 일반 사용자가 사용할 일이 극히 드뭅니다. 몇 년에 한 번 정도 사용하게 되는데, 주로 지속적으로 개발되지 않는 프로그램에서 사용하는 경우가 발생할 수 있습니다.

예를 들어, 현재 배포하고 있지 않은 리눅스용 hoffice 2022 베타 버전을 설치했을 때, 입력기 문제로 qt 라이브러리를 시스템의 것으로 변경해서 사용하기도 합니다.

이때, hword를 실행하면, 라이브러리 누락으로 실행이 되지 않을 것입니다. 이때, 누락된 라이브러리를 확인하기 위해, 이 도구를 이용할 수 있습니다.

그런-다음 누락된 라이브러리를 어딘가에서 구해서 라이브러리 경로 내에 포함시키거나 라이브러리를 포함한 디렉토리를 라이브러리 경로에 추가해서 실행될 수 있습니다. 보통, 나중에 문제가 생겼을 때, 대응하기 쉽도록 라이브러리를 포함한 디렉토리를 라이브러리 경로에 포함하는 것을 선호합니다.

Installation

데비안 libc-bin 패키지에 포함되어 있습니다. 대체로 시스템이 설치될 때, 같이 설치됩니다:

  • sudo apt install libc-bin

Security

ldd는 인수로 주어진 프로그램을 실행하는 쉘 스크립트이고, 신뢰할 수 없는 바이너리와 함께 사용하면 안 됩니다. ldd 매뉴얼 페이지는 objdumpgrep 유틸리티를 대안으로 사용하여 다음 명령을 사용하도록 제안합니다:

user@home ~/ $ objdump -p /path/program | grep NEEDED

Usage examples

user@home ~/ $ ldd /usr/bin/mp3blaster
        linux-vdso.so.1 =>  (0x00007fff8fdff000)
        libsidplay.so.1 => /usr/lib/libsidplay.so.1 (0x00007f4ea98ec000)
        libvorbisfile.so.3 => /usr/lib/libvorbisfile.so.3 (0x00007f4ea96e4000)
        libvorbis.so.0 => /usr/lib/libvorbis.so.0 (0x00007f4ea94b6000)
        libncurses.so.5 => /lib/libncurses.so.5 (0x00007f4ea9273000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00007f4ea9056000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f4ea8d41000)
        libm.so.6 => /lib/libm.so.6 (0x00007f4ea8abe000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f4ea88a7000)
        libc.so.6 => /lib/libc.so.6 (0x00007f4ea8523000)
        libogg.so.0 => /usr/lib/libogg.so.0 (0x00007f4ea831c000)
        libdl.so.2 => /lib/libdl.so.2 (0x00007f4ea8118000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f4ea9b59000)
user@home ~/ $ ldd /usr/lib/i386-linux-gnu/libstdc++.so.6.0.20
        linux-gate.so.1 (0xb7733000)
        libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xb75da000)
        libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb742f000)
        /lib/ld-linux.so.2 (0xb7734000)
        libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb7411000)

References