반응형

소프트웨어를 배포하거나 로컬 환경에서 특정 바이너리를 실행할 때, 필요한 라이브러리(의존성)가 누락되어 문제가 생기는 경우가 많습니다. 이 글에서는 운영체제별로 바이너리 의존성을 확인하는 방법을 소개합니다.

 

📌 바이너리 의존성이란?

바이너리는 일반적으로 다른 공유 라이브러리에 의존합니다. 예를 들어, 리눅스에서 컴파일된 실행 파일은 libc.so나 libpthread.so 등 여러 라이브러리와 연결되어 있어야 정상적으로 실행됩니다.

이러한 외부 의존성을 확인하는 것은 다음과 같은 상황에서 매우 중요합니다:

  • 실행 파일이 다른 시스템에서 작동하는지 확인할 때
  • 컨테이너 이미지 최적화 및 디버깅
  • 배포 패키지에 필요한 라이브러리를 모두 포함했는지 검토할 때

 

🐧 리눅스: ldd 명령어

ldd ./my_binary

 

이 명령은 바이너리가 동적으로 링크된 라이브러리를 보여줍니다.

 

예시 출력

linux-vdso.so.1 =>  (0x00007ffd2a3f0000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8ad3a23000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8ad3654000)

 

📌 주의: ldd는 실행 가능한 바이너리여야만 작동합니다. 정적 링크된 바이너리는 의존성을 표시하지 않습니다.

 

🍎 macOS: otool -L

macOS에서는 otool을 사용하여 바이너리의 동적 라이브러리를 확인할 수 있습니다.

otool -L ./my_binary

 

예시 출력

/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
@rpath/libexample.dylib (compatibility version 1.0.0, current version 1.2.3)

 

💡 @rpath@loader_path@executable_path 등 macOS 특유의 경로 지정도 함께 확인할 수 있습니다.

 

🔧 팁: 정적 vs 동적 링크 여부 확인

  • 정적 링크된 바이너리는 외부 의존성이 거의 없습니다.
  • 리눅스에서 file 명령으로 확인할 수 있습니다
file ./my_binary

 

예시

ELF 64-bit LSB executable, dynamically linked, ...

 

반응형

+ Recent posts