링킹(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
'컴퓨터 시스템 > Linker' 카테고리의 다른 글
Linker - Windows 에서 Static Linking, Dynamic Linking 실습 2 (0) | 2021.02.28 |
---|---|
Linker - Windows 에서 Static Linking, Dynamic Linking 실습 1 (0) | 2021.02.13 |
Linker - 목적파일 (0) | 2021.02.08 |