Shared Library(DDL)

공유 라이브러리(shared library) 그 동안 IDE가 자동으로 해결해주었던 컴파일 및 빌드 등에 대해서 간단하게나마 개념을 학습하고 있는 중이다.

그 중 이번에는 가끔 보면서도 어떤 파일인지 혹은 어떤 개념인지 모르고 넘어갔던 공유 라이브러리(.dll 파일)에 대해서 살펴보려 한다.

먼저 간단한 hello world 코드를 살펴보자

위의 코드를 실행 파일로 만드는 과정을 살펴보면

  • 전처리 단계
    • C pre processor, cpp가 #include 구문 등을 전처리
  • 컴파일 단계
    • CC1이 소스파일을 컴파일하여 어셈블리 소스파일 생성
  • 어셈블 단계
    • 어셈블리 소스파일은 어셈블 과정을 거쳐 목적파일이 됨
  • 링크 단계
    • 목적 코드는 라이브러리(외부라이브러리, 공유라이브러리 등)와 링크되어 최종적으로 실행 가능한 파일이 됨

여기서 설명하는 공유 라이브러리란 위의 코드에서 printf 와 같이 자주 사용되는 코드 및 메소드 등을 직접 실행파일에 삽입하는 방식(정적 링크 ; static link)이 아닌 컴파일 시점에 사용할 라이브러리를 연결하는 방식(동적 링크 ; dynamic link)을 말한다.

공유라이브러리를 활용하는 이유는 무엇일까? 만일 정적 링크를 활용한다면 해당 라이브러리의 업데이트가 발생할 경우 직접 라이브러리 코드를 변경해주거나 링크를 다시 걸어주어야 한다. 또한 이를 사용하는 프로그램 모두 재컴파일을 해주어야 할 것이다. 그 외에도 수 많은 외부 라이브러리를 하나 하나 정적으로 링크해주기에는 코드 사이즈가 상당히 방대해 질 것이다.

참고

  • https://ra2kstar.tistory.com/176
  • https://www.lesstif.com/pages/viewpage.action?pageId=12943542