개념 사전 · 개념

컴파일러·링커·로더

컴파일러 · Compiler · 링커 · Linker · 로더 · Loader

는 소스를 다른 실행 표현으로 번역하고 는 목적 파일·라이브러리의 정의를 결합하며 는 실행에 필요한 메모리 환경을 준비한다. 소스 문법 성공·링크 성공·적재 성공·업무 실행 성공은 서로 다른 검증 단계이다.

밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.

01무엇이고, 어떤 일을 하나

  • 언어의 구문과 의미를 해석해 목적 코드를 만든다.
  • 분리한 코드와 외부 라이브러리의 심벌 관계를 해결한다.
  • 실행 파일의 세그먼트를 메모리에 연결하고 초기화를 진행한다.

02어떤 순서로 동작하나

  1. 번역

    전처리된 소스를 컴파일·어셈블하여 코드와 심벌·재배치 정보를 담은 목적 파일을 만든다.

  2. 링크

    참조한 심벌의 정의를 찾고 여러 입력을 실행 파일 또는 라이브러리로 결합한다.

  3. 적재

    실행 형식··인터프리터 조건을 확인하고 필요한 세그먼트를 주소 공간에 매핑한다.

  4. 초기화와 실행

    및 런타임 초기화를 거쳐 프로그램을 실행하며 이후의 입력·메모리·I/O 오류는 별도 단계에서 발생한다.

03먼저 알아둘 용어와 구성요소

ELF 헤더는 파일 종류·대상 ·바이트 순서·진입점 등 해석 정보를 제공한다. ELF라는 형식이 같아도 CPU 명령어와 ABI가 다르면 그대로 실행할 수 없다.
링킹에 필요한 코드·데이터·심벌·재배치 정보를 분리한다. .text, .data, .bss 같은 이름은 흔한 구성 예이고 파일마다 존재하는 절이 같지는 않다.
적재 시에는 program header의 정보로 파일 내용을 주소 공간에 매핑한다. 하나의 가 여러 을 포함할 수 있다.
0으로 초기화할 영역은 파일에 같은 양의 0을 모두 저장하지 않아도 된다. 따라서 적재 의 메모리 크기가 파일 내 데이터 크기보다 클 수 있다.
다른 파일에 정의된 함수·데이터를 참조하면 목적 파일에는 심벌과 위치 보정 정보가 남을 수 있다. 링크 시 결합하거나 동적 적재 과정에서 필요한 주소를 연결한다.
공유 라이브러리 이름·검색 경로·심벌 버전·ABI가 실제 환경과 맞아야 한다. 파일이 설치되어 있다는 사실과 필요한 심벌을 제공한다는 사실은 다르다.

04예제로 따라가기

  • 두 C 파일 중 호출부만 링크하면 컴파일을 통과했더라도 정의가 없다는 오류가 날 수 있고 정의를 가진 목적 파일을 입력에 추가해야 한다.
  • .bss 같은 초기 0 데이터는 파일의 저장 크기와 실행 시 필요한 메모리 크기가 다를 수 있음을 보여 준다.
  • CPython에도 파싱·바이트코드 생성·실행 단계가 있어 인터프리터 언어라는 말이 컴파일 과정의 완전한 부재를 뜻하지 않는다.

05혼동하기 쉬운 점과 확인 기준

  • 미정의 심벌이면 필요한 객체·라이브러리 포함과 링크 순서를 본다. 중복 정의이면 같은 구현을 두 번 넣었는지 확인한다.
  • 실행권한·파일 형식·CPU/ABI·지정 인터프리터와 라이브러리 경로를 구분한다. 프로그램 파일의 존재만으로 운영체제가 적재할 수 있다고 단정하지 않는다.
  • 컴파일 최적화·디버그 정보·런타임 버전에 따라 코드 배치와 추적 출력이 달라질 수 있다. 재현 기록에는 빌드 옵션과 바이너리 식별값을 남긴다.

06상세 노트 · 실습 자료

헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.

공식 문서 · 표준

기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.