Linux에서 "ldd"명령 사용

ldd 명령은 주어진 프로그램에 필요한 공유 라이브러리를 표시하는 데 사용될 수 있습니다.

이것은 의존성이 빠졌을 때 해결하는데 유용하며 누락 된 함수와 객체를 나열하는 데 사용할 수 있습니다.

ldd 명령 구문

다음은 ldd 명령을 사용할 때 올바른 구문입니다 .

ldd [옵션] ... 파일 ...

다음은 위의 명령에서 [OPTION] 지점에 삽입 할 수있는 ldd 명령 스위치입니다.

--help이 도움말을 출력하고 종료합니다 --version 버전 정보를 출력하고 종료합니다 -d, --data-relocs는 데이터 재배치를 처리합니다 -r, --function-relocs는 데이터와 함수 재배치를 처리합니다 -u, --unused 사용되지 않는 직접 종속성을 출력합니다 -v, --verbose 모든 정보를 출력한다.

ldd 명령 사용 방법

다음 명령을 사용하여 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 명령을 실행하지 마십시오. 이 방법은 전체 의존성 트리가 아닌 직접적인 의존성만을 보여주는보다 안전한 대안입니다 : objdump -p / path / to / program | grep이 필요 합니다.

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

ldd를 사용하여 종속성을 찾으려면 응용 프로그램의 전체 경로를 제공해야합니다.이 방법은 여러 가지 방법으로 수행 할 수 있습니다.

예를 들어 Firefox 의 경로를 찾는 방법은 다음과 같습니다.

find / -name firefox

그러나 find 명령 의 문제점은 실행 파일을 나열 할뿐만 아니라 Firefox가있는 모든 곳을 나열한다는 것입니다.

이 접근법은 약간의 잔인한 행동이며 권한을 높이기 위해 sudo 명령 을 사용해야 할 수도 있습니다. 그렇지 않으면 많은 권한 오류가 발생할 가능성이 있습니다.

대신 whereis 명령 을 사용하여 응용 프로그램의 경로를 찾는 것이 훨씬 쉽습니다.

whereis 파이어 폭스

이번에는 다음과 같이 출력 될 것입니다 :

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