콘텐츠로 이동

링커와 로더 (Linkers and Loaders)

Jan 25, 2026

링커(linker)는 재배치 가능 객체 파일들을 하나의 바이너리 실행 파일로 결합하고, 로더(loader)는 실행 파일을 메모리에 적재하여 CPU에서 실행 가능하게 한다.

  1. 컴파일: 소스 파일 → 재배치 가능 객체 파일(relocatable object file)
    • 어떤 물리 메모리 위치에도 적재되도록 설계된 형식
  2. 링킹: 링커가 재배치 가능 객체 파일들을 하나의 바이너리 실행 파일로 결합
    • 표준 C 라이브러리나 수학 라이브러리(-lm) 등 다른 객체 파일/라이브러리도 포함 가능
  3. 로딩: 로더가 바이너리 실행 파일을 메모리에 적재
  4. 실행: CPU 코어에서 실행 가능

링킹과 로딩에 관련된 활동:

  • 프로그램 부분에 최종 주소를 할당
  • 코드와 데이터를 해당 주소에 맞게 조정
  • 프로그램이 메모리 내 어디에 적재되어도 정상 동작 가능하게 함
  1. 쉘에서 ./main 실행
  2. 쉘이 fork() 시스템 콜로 새 프로세스 생성
  3. 쉘이 exec() 시스템 콜 호출하여 로더 실행
  4. 로더가 main 프로그램을 메모리에 적재
  5. CPU에서 실행

모든 라이브러리를 실행 파일에 링크/로드하는 대신, 프로그램 로드 시 동적으로 링크한다:

  • Windows: DLLs (Dynamically Linked Libraries)

장점:

  • 사용하지 않을 수 있는 라이브러리의 링킹/로딩 회피
  • 라이브러리가 런타임에 필요할 때만 조건부 링크/로드
  • 여러 프로세스가 동적 링크 라이브러리를 공유 가능 → 메모리 절약
포맷운영체제
ELF (Executable and Linkable Format)UNIX, Linux
PE (Portable Executable)Windows
Mach-OmacOS
  • ELF 파일에는 프로그램 진입점(entry point) 정보 포함 - 프로그램 실행 시 첫 명령어의 주소
  • file 명령으로 ELF 파일 타입 확인 가능
  • readelf 명령으로 ELF 파일 섹션 분석 가능
접근 방식장점단점
정적 링킹실행 시 외부 의존성 없음, 배포 간편실행 파일 크기 증가, 라이브러리 업데이트 시 재컴파일 필요
동적 링킹실행 파일 크기 감소, 메모리 공유 가능, 라이브러리 독립적 업데이트 가능런타임 의존성, DLL 버전 충돌 가능성(DLL Hell)
  • Operating System Concepts, 10th Edition, Chapter 2, p.75-77