리눅스 ldd, 공유 라이브러리 의존성 확인 방법
- 운영체제(OS)
- 2022. 9. 17.
리눅스에서 공유 라이브러리 의존성을 확인할 때 ldd
명령어를 사용합니다. 라이브러리는 정적 라이브러리, 동적 (또는 공유) 라이브러리로 구분할 수 있습니다. 정적 라이브러리는 실행 파일에 포함시켜 배포하며, 동적 라이브러리는 독립적으로 존재하되 실행 파일 런타임 시 연결되는 형태입니다. 즉 프로그램에 자동으로 사용되지만 독립적으로 존재합니다. 리눅스에서는 주로 .o
또는 .so
파일 확장자입니다.
ldd가 확인해주는 건 이런 공유 라이브러리가 정상적으로 존재하는지입니다. 가령, 리눅스의 명령어들도 모두 공유 라이브러리가 사용됩니다. cp
라는 명령 기능을 하나 사용해도 libselinux.so, librt.so, libacl.so, libattr.so … 등 여러 라이브러리가 필요합니다. 그중 하나라도 없으면 cp는 동작할 수 없습니다. 그래서 ‘의존성’이라고 부릅니다.
ldd
ldd 구문
ldd [옵션] 실행 파일
ldd 예시
cp 명령어의 공유 라이브러리 의존성을 확인하는 방법은 아래와 같습니다.
$ ldd /bin/cp
linux-vdso.so.1 => (0x00007fffaf3ff000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003a06a00000)
librt.so.1 => /lib64/librt.so.1 (0x0000003a06200000)
libacl.so.1 => /lib64/libacl.so.1 (0x0000003a13000000)
libattr.so.1 => /lib64/libattr.so.1 (0x0000003a0ea00000)
libc.so.6 => /lib64/libc.so.6 (0x0000003a05200000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003a05a00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003a04a00000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003a05600000)
이처럼 cp 명령어를 동작하는데 필요한 라이브러리가 모두 메모리에 로드된 것을 확인할 수 있습니다.
만약 라이브러리를 찾지 못하면 확인된 경로 대신 not found
라는 결과를 출력합니다. 그런 경우 모듈의 경로를 제대로 인식하지 못했거나 모듈이 존재하지 않는 것이니 확인이 필요합니다.
ldd는 동적 실행 파일에서만 작동합니다. 그렇지 않으면 아래와 같은 메시지를 출력합니다.
Output:
not a dynamic executable
실행 파일을 입력할 땐 반드시 전체 경로를 입력해야 합니다. 그렇지 않으면 동작하지 않습니다. 그게 번거롭다면 which
명령어를 사용할 수도 있습니다.
$ which pwd
/usr/bin/pwd
$ ldd `which pwd`
linux-vdso.so.1 (0x00007ffc3b9e4000)
libc.so.6 => /lib64/libc.so.6 (0x00007f2d491a9000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2d49396000)
'운영체제(OS)' 카테고리의 다른 글
도커(Docker)란? VM과의 비교 (0) | 2022.09.21 |
---|---|
리눅스 환경변수 설정하는 방법 (export, profile, bashrc) (0) | 2022.09.19 |
리눅스 mv 명령어 사용 방법 (파일 이동) (0) | 2022.09.05 |
윈도우 성능 모니터 사용 방법 (CPU 사용 추이 분석) (0) | 2022.09.02 |
리눅스 nohup 사용 방법, &과의 차이 (0) | 2022.09.01 |