ldd 사용 주어진 프로그램에 필요한 공유 라이브러리를 표시하는 명령입니다. ldd 명령은 누락된 종속성이 있을 때 작업하는 데 유용합니다. 이 명령은 누락된 기능과 개체도 나열합니다.
ldd 명령 구문
오류를 방지하려면 ldd 명령에 대한 적절한 구문을 준수하십시오.
ldd [OPTION]... FILE...
위 명령의 [OPTION] 스팟에 삽입된 사용 가능한 ldd 명령 스위치 중 하나 이상을 사용합니다.
- --help:이 도움말을 인쇄하고 종료합니다.
- --version:버전 정보를 출력하고 종료합니다.
- -d, --data-relocs:데이터 재배치를 처리합니다.
- -r, --function-relocs:데이터 및 기능 재배치를 처리합니다.
- -u, --unused:사용하지 않는 직접 종속성을 인쇄합니다.
- -v, --verbose:모든 정보를 인쇄합니다.
ldd 명령 사용 방법
프로그램에 대한 자세한 정보를 얻으려면 다음 명령을 실행하십시오.
ldd -v /path/to/program/executable
출력은 다음과 같이 버전 정보와 공유 라이브러리에 대한 경로 및 주소를 보여줍니다.
libshared.so
linux-vdso.so.1 => (0x00007fff26ac8000)
libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff1dfafe000)
SO 파일이 전혀 존재하지 않는 경우 다음 명령을 사용하여 누락된 라이브러리를 찾을 수 있습니다.
ldd -d path/to/program
출력은 다음과 유사합니다.
linux-vdso.so.1 (0x00007ffc2936b000)
/home/gary/demo/garylib.so => not foundlibc.so.6 => usr/lib/libc.so.6 (0x00007fd0c6259000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd0c65fd000)
ldd 명령어가 실행할 수 있으므로 신뢰할 수 없는 프로그램에 대해 ldd 명령어를 실행하지 마세요. 대신 전체 종속성 트리가 아닌 직접 종속성만 표시하는 더 안전한 대안을 사용하세요.
objdump -p /path/to/program | grep NEEDED
응용 프로그램 경로를 찾는 방법
여러 가지 방법으로 수행할 수 있는 ldd로 종속성을 찾으려면 응용 프로그램에 대한 전체 경로를 제공해야 합니다.
예를 들어 Firefox의 경로를 찾는 방법은 다음과 같습니다.
find / -name firefox
그러나 find 명령의 문제는 실행 파일과 Firefox가 있는 모든 위치를 다음과 같이 나열한다는 것입니다.
/etc/skel/.mozilla/firefox
/home//cache/mozilla/firefox
/home//.mozilla/firefox
/usr/bin/Firefox
/usr/lib/Firefox
/usr/lib/Firefox/Firefox
이 접근 방식은 약간 과도하며 권한을 높이기 위해 sudo 명령을 사용해야 할 수도 있습니다. 그렇지 않으면 man 권한 거부 오류가 발생할 수 있습니다.
대신 whereis 명령을 사용하여 애플리케이션의 경로를 찾는 것이 더 쉽습니다.
whereis firefox
이번에는 다음과 같이 출력될 수 있습니다.
/usr/bin/firefox
/etc/firefox
/usr/lib/firefox
그런 다음 Firefox용 공유 라이브러리를 찾으려면 다음 명령을 입력하십시오.
ldd /usr/bin/firefox
명령의 출력은 다음과 같습니다.
linux-vdso.so.1 (0x00007ffff8364000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007feb9917a000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007feb98f76000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007feb98bf4000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007feb988f6000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007feb986e0000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007feb9833c000)
/lib64/ld-linux-x86-64.so.2 (0x00007feb99397000)
Linux-vdso.so.1은 라이브러리 이름이고 16진수는 메모리에서 라이브러리가 로드되는 주소입니다.
많은 줄에서 => 기호 뒤에 경로가 옵니다. 이것은 물리적 바이너리의 경로입니다. 16진수는 라이브러리가 로드되는 주소입니다.