여러 조각의 코드와 데이터를 메모리로 로드해서 실행 가능한 파일로 합치는 과정
컴파일 타임, 로드 타임, 런타임에 이루어질 수 있음
링킹을 통해 seperate compilation이 가능해짐
큰 규모의 애플리케이션을 단일 소스 파일에서 관리하는 대신, 이를 작은 모듈로 분리해서 각각 변경, 컴파일할 수 있음
모듈을 수정할 때 해당 모듈만 recompile, relink하면 됨
정적 링커는 relocatable object files와 command-line arguments를 받아서 fully linked executable object file을 생성함
실행 파일을 생성하기 위해 링커는 두 가지 메인 태스크를 수행함
Symbol resolutionsymbol reference를 정확히 하나의 symbol definition과 연결함Relocationsection을 생성하므로 section들을 relocate하고 symbol에 대한 참조를 변경함object file에는 세 가지가 있음
relocatable object file과 컴파일 타임에 합쳐져서 executable object file이 될 수 있는 형태로 바이너리 코드와 데이터를 가지고 있음relocatable object file로, 메모리에 로드되어 동적으로 링크될 수 있음object file은 특정 파일 포맷을 따라 구성됨
현대 x86-64 리눅스/유닉스 시스템은 ELF(Executable and Linkable Format)를 사용
각 relocatable object module m은 symbol table을 가짐
symbol table은 m이 정의하거나 참조한 모든 symbol에 대한 정보를 가짐
Symbol에는 세 가지가 있음
module m에 의해 정의되고 다른 모듈에 의해 참조될 수 있는 global symbol (nonstatic C 함수와 전역 변수)module m에 의해 참조되고 다른 모듈에 의해 정의된 global symbolmodule m에 의해서만 정의, 참조되는 local symbol (static C 함수와 변수)