참조: https://it-eldorado.tistory.com/49
링커는 소프트웨어 개발 시에 중요한 역할을 수행하는데, 이들이 독립적인 컴파일을 가능하게 한다. (모듈화를 할때, 중요한 역할을 한다.)
드라이버 동작 내용
해당 그림은 정적연결의 예시이다.
1. 먼저 C 전처리기(cpp)를 돌리고, main.i로 변역한다.
2. C 컴파일러(cc1)를 돌려서 ASCII 어셈블리 언어 파일인 main.s로 번역한다.
3. 어셈블러(as)를 돌려서 바이너리 목적파일인 main.o로 번역한다.
4. 그 후, 링커 프로그램(ld)를 실행하는데, 위 그림에서 예로 들면, 필요한 시스템 목적파일들과 함께 실행 가능 목적파일 prog를 생성하기 위해 main.o와 sum.o를 연결한다.
1. 심볼 해석
(static으로 선언되지 않은 지역변수는 런타임에 stack영역에 저장되기 때문에 이는 포함하지 않는다.)
2. 재배치
로딩 과정에서 컴파일 및 링크 과정이 진행되고, 프로그램을 실행한다.
쉘은 로더라고 알려진 메모리 상주 운영체제 코드를 호출해서 이 프로그램을 실행한다.
로더는 디스크로부터 실행 가능한 목적파일 내의 코드와 데이터를 메모리로 복사하고 이 프로그램의 첫 번째 인스트럭션, 즉 엔트리 포인트로 점프해서 프로그램을 실행한다.