링킹(linking)은 컴파일된 오브젝트 파일 (.obj)을 모아서 하나의 실행 파일을 만드는 과정이다. 요즘 시대의 IDE(MSVC, Xcode 등)에는 빌드시에 자동적으로 링킹이 수행되지만, 과거에는 컴파일 후에 수동으로 링킹을 해주었다.  다음과 같이 크게 두 종류의 링킹이 있다.

 

Static Linking

 

- 컴파일시에 코드를 링킹하는 방법이다. 

- 재배치 가능 목적파일들을 연결하는 과정이다. 

- 링킹시 연결할 목적코드당 코드를 중복하여 복사 붙여 넣기하기 때문에 실행파일의 크고,

  컴파일에 소요되는 시간이 증가하지만, 프로그램 실행시 동적 링킹보다는 빠르게 기능을 수행한다. 

- 프로그램 빌드에 필수적인 정적 파일은 이미 포함되어 있지만, 이외의 추가적인 파일은 별도로 설정 해주어야한다. 

  예 ) MSVC의 경우, 빌드 전에 프로젝트 속성 > 링커 > 일반 > 추가 라이브러리 디렉터리 //  경로추가

                                   프로젝트 속성 > 링커 > 입력 > 추가 종속성 // lib 파일 추가

  

Dynamic Linking

 

- 런타임시에 코드를 링킹하는 방법이다.

- 컴파일시 소요되는 시간이 줄어들고 실행파일 크기가 작지만,

  프로그램 실행시 정적 링킹보다는 느리게 기능을 수행한다. 

- 필요한 .dll 파일을 실행파일과 같은 경로에 두면 된다. 

 

 

참고

 

Randal E Bryant, David R O'Hallaron <Computer Systems : A Programmer's Perspective> 3rd edition

docs.microsoft.com

+ Recent posts