링커와 로더 (Linkers and Loaders)
Jan 25, 2026
핵심 개념
섹션 제목: “핵심 개념”링커(linker)는 재배치 가능 객체 파일들을 하나의 바이너리 실행 파일로 결합하고, 로더(loader)는 실행 파일을 메모리에 적재하여 CPU에서 실행 가능하게 한다.
컴파일에서 실행까지의 과정
섹션 제목: “컴파일에서 실행까지의 과정”- 컴파일: 소스 파일 → 재배치 가능 객체 파일(relocatable object file)
- 어떤 물리 메모리 위치에도 적재되도록 설계된 형식
- 링킹: 링커가 재배치 가능 객체 파일들을 하나의 바이너리 실행 파일로 결합
- 표준 C 라이브러리나 수학 라이브러리(-lm) 등 다른 객체 파일/라이브러리도 포함 가능
- 로딩: 로더가 바이너리 실행 파일을 메모리에 적재
- 실행: CPU 코어에서 실행 가능
재배치 (Relocation)
섹션 제목: “재배치 (Relocation)”링킹과 로딩에 관련된 활동:
- 프로그램 부분에 최종 주소를 할당
- 코드와 데이터를 해당 주소에 맞게 조정
- 프로그램이 메모리 내 어디에 적재되어도 정상 동작 가능하게 함
UNIX/Linux에서 로딩 과정
섹션 제목: “UNIX/Linux에서 로딩 과정”- 쉘에서
./main실행 - 쉘이
fork()시스템 콜로 새 프로세스 생성 - 쉘이
exec()시스템 콜 호출하여 로더 실행 - 로더가
main프로그램을 메모리에 적재 - CPU에서 실행
동적 링크 라이브러리 (DLL)
섹션 제목: “동적 링크 라이브러리 (DLL)”모든 라이브러리를 실행 파일에 링크/로드하는 대신, 프로그램 로드 시 동적으로 링크한다:
- Windows: DLLs (Dynamically Linked Libraries)
장점:
- 사용하지 않을 수 있는 라이브러리의 링킹/로딩 회피
- 라이브러리가 런타임에 필요할 때만 조건부 링크/로드
- 여러 프로세스가 동적 링크 라이브러리를 공유 가능 → 메모리 절약
실행 파일 포맷
섹션 제목: “실행 파일 포맷”| 포맷 | 운영체제 |
|---|---|
| ELF (Executable and Linkable Format) | UNIX, Linux |
| PE (Portable Executable) | Windows |
| Mach-O | macOS |
- ELF 파일에는 프로그램 진입점(entry point) 정보 포함 - 프로그램 실행 시 첫 명령어의 주소
file명령으로 ELF 파일 타입 확인 가능readelf명령으로 ELF 파일 섹션 분석 가능
트레이드오프
섹션 제목: “트레이드오프”| 접근 방식 | 장점 | 단점 |
|---|---|---|
| 정적 링킹 | 실행 시 외부 의존성 없음, 배포 간편 | 실행 파일 크기 증가, 라이브러리 업데이트 시 재컴파일 필요 |
| 동적 링킹 | 실행 파일 크기 감소, 메모리 공유 가능, 라이브러리 독립적 업데이트 가능 | 런타임 의존성, DLL 버전 충돌 가능성(DLL Hell) |
관련 개념
섹션 제목: “관련 개념”- 시스템 부팅 (System Boot) - 커널을 메모리에 로드하는 과정으로 로더의 개념이 적용됨
- 시스템 프로그램 (System Programs) - 링커와 로더를 포함하는 프로그램 적재 및 실행 관련 시스템 유틸리티
- 시스템 콜 유형 (System Call Types) - fork(), exec() 등 프로세스 제어 시스템 콜로 로더가 실행됨
- 폰 노이만 아키텍처 (Von Neumann Architecture) - 프로그램이 메모리에 적재되어야 실행 가능한 기반 아키텍처
- Operating System Concepts, 10th Edition, Chapter 2, p.75-77