Linker, Loader   링커, 로더

(2024-07-02)

Linking, 링킹, 로딩


1. 링커(Linker) 및 로더 (Loader)컴파일러,어셈블러에 의해 기계어로 번역된 오브젝트 파일이,
     - 바로 실행 파일이 되는 것이 아니고,  
     - 링커 및 로더를 거쳐, 
     - 비로소 실행 가능 파일 생성 및 메모리에 적재되어 실행 됨

  ㅇ 주요 역할
     - 주 기억장치의 할당(확보)
        . 프로그램의 시작 위치 결정 등
     - 연결 (Linking)
        . `시스템 API`,`미리 컴파일라이브러리`들을 사용자 프로그램에 연결시키는 것
     - 재배치 (Relocation)
     - 프로그램 연결 적재 (Loading)

  ㅇ 주요 단계
     - 소스 프로그램 
     - (컴파일러) 
        . 오브젝트 파일 생성
     - (링커)  <= 필요시, 연관된 다른 오브젝트 파일들이 추가됨
        . 실행 파일 생성
     - (로더) 
        . 메인 메모리 적재  <= 필요시, 동적 링크 라이브러리들이 추가됨

  ※ [참고]  ☞ 빌드 과정 참조


2. 링커 (linker)링크/링킹 (Linking) 이란?
     - 오브젝트 파일들을 최종적으로 사용 가능하게 변환하는 것
        . 한편, 링크 시에, 비록 덩치큰 라이브러리를 지정하지만,
        . 이때, 자동으로 필요한 오브젝트 화일들 만을 선별 꺼내어 결합시킴
           .. 例) gcc -o main main.o -lm (수학 라이브러리) 

  ㅇ 링커의 역할
     - 메인 루틴을 최초 실행 위치로 식별해 놓고, 
     - 기호가 참조되는 위치를 메모리 주소와 연결하고,
     - 모든 오브젝트 파일들을 결합시키고,
     - 이에 라이브러리까지 엮어서,
        . 이때, 프로그램에 필요한 각 라이브러리 루틴이 복제되어, 실행 파일에 저장됨 (바인딩)
        . 단, 동적 링킹(dynamic linking) 경우에는, 바인딩 대신에 런타임 때에 엮어짐  
     - 하나의 실행 파일로 만드는 것
     * 주로, 오브젝트 파일라이브러리 파일에 대한 링킹 (Linking, 엮음)

  ㅇ 링커의 입력
     - 중간 (임시) 파일로써, 컴파일오브젝트 파일 (재배치 가능한 목적 파일) 임

  ㅇ 링커의 출력 (결과물)
     - 실행 파일 : (리눅스/유닉스 : *.out, 윈도우 : *.exe)
     - 정적 라브러리 : (리눅스/유닉스 : *.a, 윈도우 : *.lib)
     - 동적 라이브러리 : (리눅스/유닉스 : *.so, 윈도우 : *.dll, 맥OS : *.dylib)


3. 로더 (loader) / 로딩 (loading)

  ㅇ 재배치 가능한 기계어 프로그램을 입력으로하여,
     - 메모리 상의 절대 주소를 갖는 동등프로그램을 생성 (연결 적재)
     
  ㅇ 이진 실행 파일을 메모리에 적재하는 것

  ㅇ 동적 로드/로더 (Dynamic Load)    ☞ 동적 연결 라이브러리 참조
     - 전체가 실행 시점에 사용되는 방식

컴파일러
   1. 컴파일   2. 전처리   3. 어휘 분석, 구문 분석, 의미 분석   4. 링커 및 로더   5. 형식 언어   6. 유한상태 머신   7. BNF,EBNF  


"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"