Computer >> 컴퓨터 >  >> 체계 >> Linux

Linux에서 ldd 명령 사용

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)
Linux에서 ldd 명령 사용

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)
Linux에서 ldd 명령 사용

ldd 명령어가 실행할 수 있으므로 신뢰할 수 없는 프로그램에 대해 ldd 명령어를 실행하지 마세요. 대신 전체 종속성 트리가 아닌 직접 종속성만 표시하는 더 안전한 대안을 사용하세요.

objdump -p /path/to/program | grep NEEDED
Linux에서 ldd 명령 사용

응용 프로그램 경로를 찾는 방법

여러 가지 방법으로 수행할 수 있는 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
Linux에서 ldd 명령 사용

그런 다음 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진수는 라이브러리가 로드되는 주소입니다.