Skip to main content

"ldd"명령을 사용하여 프로그램의 공유 라이브러리 찾기

윈도우10에서 우분투 리눅스 APP 설치 | 개발 환경 구성 (유월 2026)

윈도우10에서 우분투 리눅스 APP 설치 | 개발 환경 구성 (유월 2026)
Anonim

사용 ldd 명령을 사용하여 주어진 프로그램에 필요한 공유 라이브러리를 표시합니다. 종속성이 누락 된 경우에 유용합니다. 이 명령은 누락 된 기능 및 개체도 나열합니다.

ldd 명령 구문

오류를 피하기 위해 ldd 명령에 대한 올바른 구문을 관찰하십시오.

ldd 옵션 … 파일 …

사용할 수있는 ldd 명령 스위치 중 하나 이상을 사용하십시오. 선택권 위의 명령에서 자리 표시 :

--help | 이 도움말을 출력하고 종료하십시오. --version | 버전 정보를 출력하고 종료하십시오. -d, --data-relocs | 데이터 재배치 프로세스 -r, --function-relocs | 프로세스 데이터 및 함수 재배치 -u, --unused | 사용되지 않는 직접 의존성을 인쇄한다. -v, --verbose | 모든 정보를 인쇄하십시오.

ldd 명령 사용 방법

프로그램에 대한 추가 정보를 얻으려면 다음 명령을 실행하십시오.

$ ldd -v / path / to / program / executable

출력은 다음과 같이 버전 정보와 공유 라이브러리에 대한 경로 및 주소를 표시합니다.

$ ldd 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이 필요하다.

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

여러 가지 방법으로 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 명령을 사용해야 할 수도 있습니다. 그렇지 않으면 많은 권한 거부 오류가 발생할 수 있습니다.

대신 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 진수는 라이브러리가로드 될 주소입니다.