728x90
링커란?
링커(linker)는 컴파일러가 만들어낸 하나 이상의 목적 파일을 가져와 이를 단일 실행 프로그램으로 병합하는 프로그램
링커는 소프트웨어 개발 과정에서 필수적인 도구임
컴파일러가 소스 코드를 번역하여 오브젝트 파일을 생성하는 것만으로는 프로그램이 실행될 수 없음
링커는 심벌 해결, 재배치, 라이브러리 포함 등의 작업을 통해 여러 오브젝트 파일을 결합하여 실행 가능한 프로그램을 생성함
따라서 링커의 역할과 동작 원리를 이해하는 것은 효율적인 소프트웨어 개발을 위해 매우 중요함
컴파일 언어의 동작 과정
- 소스 코드 작성: 개발자가 소스 코드를 작성
- 컴파일 단계: 소스 코드를 오브젝트 파일로 변환함. 각 오브젝트 파일은 독립적으로 존재하며, 단독으로는 실행되지 않음
- 링킹 단계: 여러 오브젝트 파일을 결합하여 하나의 실행 파일을 생성
링커의 주요 역할
- 심벌 해결(Symbol Resolution)
- 각 오브젝트 파일에는 함수나 변수가 정의되고 참조됨
- 링커는 이러한 심벌들을 확인하고 올바른 메모리 주소를 할당함
- 예를 들어 함수 A가 다른 오브젝트 파일에 정의된 함수 B를 호출할 때, 링커는 함수 B의 실제 메모리 위치를 찾아 함수 A가 올바르게 이를 참조할 수 있도록 함
- 재배치(Relocation)
- 오브젝트 파일에서 코드와 데이터는 고정된 메모리 주소를 가지지 않음
- 링커는 이들을 적절한 메모리 위치로 이동시키고, 프로그램의 각 부분이 올바르게 동작하도록 재배치함
- 이는 메모리 주소가 충돌하지 않고 프로그램이 올바르게 실행되도록 보장함
- 라이브러리 포함(Library Inclusion)
- 프로그램이 사용하는 라이브러리를 포함하여 최종 실행 파일을 만듦
- 예를 들어, 표준 C 라이브러리나 사용자 정의 라이브러리가 프로그램에 필요할 경우, 링커는 해당 라이브러리의 오브젝트 파일들을 결합하여 실행 파일에 포함시킴
링킹 과정
- 오브젝트 파일 로드: 컴파일러가 생성한 오브젝트 파일들을 메모리에 로드
- 심벌 테이블 생성: 각 오브젝트 파일에 포함된 심벌 정보를 바탕으로 심벌 테이블을 생성
- 심벌 해결: 심볼 테이블을 참조하여 각 심벌의 정의와 참조를 해결
- 재배치 수행: 각 심볼의 메모리 주소를 계산하고, 코드와 데이터를 적절한 위치로 이동
- 라이브러리 결합: 필요한 라이브러리를 오브젝트 파일과 결합하여 최종 실행 파일을 생성
링커의 종류
- ld: 유닉스 계열 운영체제에서 널리 사용되는 링커
- gold: GNU 프로젝트에서 개발한 빠른 링커로, ld의 대안으로 사용됨
- MSVC Linker: 마이크로소프트 비주얼 스튜디오에서 제공하는 링커로, Windows 환경에서 주로 사용됨
728x90
'Computer Science' 카테고리의 다른 글
링커의 심벌해석 대상 (3) | 2024.07.24 |
---|---|
지역 심벌과 전역 심벌 (0) | 2024.07.24 |
컴파일 언어와 인터프리터 언어 비교 (0) | 2024.07.10 |
Brute force(브루트 포스)란? (0) | 2024.07.09 |
스택(stack)과 힙(Heap) (0) | 2024.03.27 |