개념 사전 · 개념
컴파일러·링커·로더
컴파일러 · Compiler · 링커 · Linker · 로더 · Loader
는 소스를 다른 실행 표현으로 번역하고 는 목적 파일·라이브러리의 정의를 결합하며 는 실행에 필요한 메모리 환경을 준비한다. 소스 문법 성공·링크 성공·적재 성공·업무 실행 성공은 서로 다른 검증 단계이다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
01무엇이고, 어떤 일을 하나
- 언어의 구문과 의미를 해석해 목적 코드를 만든다.
- 분리한 코드와 외부 라이브러리의 심벌 관계를 해결한다.
- 실행 파일의 세그먼트를 메모리에 연결하고 초기화를 진행한다.
02어떤 순서로 동작하나
- 번역
전처리된 소스를 컴파일·어셈블하여 코드와 심벌·재배치 정보를 담은 목적 파일을 만든다.
- 링크
참조한 심벌의 정의를 찾고 여러 입력을 실행 파일 또는 라이브러리로 결합한다.
- 적재
실행 형식··인터프리터 조건을 확인하고 필요한 세그먼트를 주소 공간에 매핑한다.
- 초기화와 실행
및 런타임 초기화를 거쳐 프로그램을 실행하며 이후의 입력·메모리·I/O 오류는 별도 단계에서 발생한다.
03먼저 알아둘 용어와 구성요소
- ELF 헤더는 파일 종류·대상 ·바이트 순서·진입점 등 해석 정보를 제공한다. ELF라는 형식이 같아도 CPU 명령어와 ABI가 다르면 그대로 실행할 수 없다.
- 링킹에 필요한 코드·데이터·심벌·재배치 정보를 분리한다. .text, .data, .bss 같은 이름은 흔한 구성 예이고 파일마다 존재하는 절이 같지는 않다.
- 적재 시에는 program header의 정보로 파일 내용을 주소 공간에 매핑한다. 하나의 가 여러 을 포함할 수 있다.
- 0으로 초기화할 영역은 파일에 같은 양의 0을 모두 저장하지 않아도 된다. 따라서 적재 의 메모리 크기가 파일 내 데이터 크기보다 클 수 있다.
- 다른 파일에 정의된 함수·데이터를 참조하면 목적 파일에는 심벌과 위치 보정 정보가 남을 수 있다. 링크 시 결합하거나 동적 적재 과정에서 필요한 주소를 연결한다.
- 공유 라이브러리 이름·검색 경로·심벌 버전·ABI가 실제 환경과 맞아야 한다. 파일이 설치되어 있다는 사실과 필요한 심벌을 제공한다는 사실은 다르다.
04예제로 따라가기
- 두 C 파일 중 호출부만 링크하면 컴파일을 통과했더라도 정의가 없다는 오류가 날 수 있고 정의를 가진 목적 파일을 입력에 추가해야 한다.
- .bss 같은 초기 0 데이터는 파일의 저장 크기와 실행 시 필요한 메모리 크기가 다를 수 있음을 보여 준다.
- CPython에도 파싱·바이트코드 생성·실행 단계가 있어 인터프리터 언어라는 말이 컴파일 과정의 완전한 부재를 뜻하지 않는다.
05혼동하기 쉬운 점과 확인 기준
- 미정의 심벌이면 필요한 객체·라이브러리 포함과 링크 순서를 본다. 중복 정의이면 같은 구현을 두 번 넣었는지 확인한다.
- 실행권한·파일 형식·CPU/ABI·지정 인터프리터와 라이브러리 경로를 구분한다. 프로그램 파일의 존재만으로 운영체제가 적재할 수 있다고 단정하지 않는다.
- 컴파일 최적화·디버그 정보·런타임 버전에 따라 코드 배치와 추적 출력이 달라질 수 있다. 재현 기록에는 빌드 옵션과 바이너리 식별값을 남긴다.
06상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.