1. 링커(Linker) 및 로더 (Loader)
ㅇ 컴파일러,어셈블러에 의해 기계어로 번역된 오브젝트 파일이,
- 바로 실행 파일이 되는 것이 아니고,
- 링커 및 로더를 거쳐,
- 비로소 실행 가능 파일 생성 및 메모리에 적재되어 실행 됨
ㅇ 주요 역할
- 주 기억장치의 할당(확보)
. 프로그램의 시작 위치 결정 등
- 연결 (Linking)
. `시스템 API`,`미리 컴파일된 라이브러리`들을 사용자 프로그램에 연결시키는 것
- 재배치 (Relocation)
- 프로그램 연결 적재 (Loading)
ㅇ 주요 단계
- 소스 프로그램
- (컴파일러)
. 오브젝트 파일 생성
- (링커) <= 필요시, 연관된 다른 오브젝트 파일들이 추가됨
. 실행 파일 생성
- (로더)
. 메인 메모리 적재 <= 필요시, 동적 링크 라이브러리들이 추가됨
※ [참고용어]
- 오브젝트 파일 (Object File) : 재배치 가능 오브젝트 파일
. 모듈별로 개발되어 컴파일된 것
. 실제 특정 주소가 아닌, 임의의 물리 메모리 위치에 적재되도록, 만들어진 것
- 오브젝트 라이브러리 파일 (Object Library File)
. 모듈별 오브젝트 파일들을 합쳐서, 1개의 라이브러리 파일로 만든 것
- 링크/링킹 (Linking)
. 오브젝트 파일들을 최종적으로 사용 가능하게 변환하는 것
.. 한편, 링크 시에, 비록 덩치큰 라이브러리를 지정하지만,
.. 이때, 자동으로 필요한 오브젝트 화일들 만을 선별 꺼내어 결합시킴
.. 例) gcc -o main main.o -lm (수학 라이브러리)
2. 링커 (linker)
ㅇ 링커의 역할
- 메인 루틴을 최초 실행 위치로 식별해 놓고,
- 기호가 참조되는 위치를 메모리 주소와 연결하고,
- 모든 오브젝트 파일들을 결합시키고,
- 이에 라이브러리까지 엮어서,
- 하나의 실행 파일로 만드는 것
- 주로, 오브젝트 파일 및 라이브러리 파일에 대한 링킹 (Linking, 엮음)
ㅇ 링커의 입력
- 링커에 입력이 되는 파일이, 중간 화일인 컴파일된 오브젝트 파일 임
3. 로더 (loader)
ㅇ 재배치 가능한 기계어 프로그램을 입력으로하여,
- 메모리 상의 절대 주소를 갖는 동등한 프로그램을 생성 (연결 적재)
ㅇ 이진 실행 파일을 메모리에 적재하여,
ㅇ 동적 로드/로더 (Dynamic Load) ☞ 동적 연결 라이브러리 참조
- 전체가 실행 시점에 사용되는 방식
1.
2.
3.
4.
5.
6.
7.