티스토리 뷰

OS

링커(Linker)란?

tioon 2023. 3. 30. 00:22

*공부 기록용으로 하는 블로그입니다.잘못된 개념이나 오타가 있을 수 있습니다. 잘못된 정보알려주시면 수정하겠습니다!*

 

링커란?

   -여려개의 오브젝트 파일에 있는 코드와 데이터를 모아서 연결하여 실행파일을 만드는 링킹(Linking)이란 작업을 하는 프로그램이다. 이것으로 인해 한개의 소스파일로 구성한 후 별도로 수정을 할 수 있고 더 세분화하여 개발이 가능해졌다.링커는 보통 오브젝트 파일에서 참조하는 함수,변수유무를 확인하고 여러 파일의 코드와 데이터섹션을 하나로 합쳐주는 작업을 합니다.

 

링커의 장점 

   -모듈화가 가능함 : 큰 파일하나를 세분화하여 나눠 여러개의 모듈로 만들 수 있다 이렇게 하면 코드의 유지보수성이 좋아지고 가독성도 좋아진다.

   -컴파일 간소화 : 만약에 약간의 기능을 수정해야하는데 소스코드가 한파일에 있으면 전체를 다시 컴파일해야하지만 세코드를 세분화 해서 나누면 파일 몇개만 재컴파일을 하면되어서 속도가 줄어든다.

 

 

 

링킹 과정

   

  1.링커의 시작

      -컴파일된 오브젝트 파일이 있는위치를 찾아 실행됩니다.

 

  2.라이브러리 파일 검색

      -링크하려는 라이브러리 파일들을 찾아 로드합니다. 파일을 검색하여 필요한 라이브러리 함수나 변수를 사용할 수 있           도록 연결합니다.

 

  3.심볼 해석(Symbol Resolution)

      -각 객체 파일에 정의된 함수나 변수들의 정보를 심볼(Symbol)이라 하는데 이것을 해석하여 실제 메모리 상의 주소와 연결한후 참조하려는 다른객체  파일에 있는 심볼과 연결합니다.만약 같은 심볼이 여러 파일에서 사용될 경우 하나로 병합과정도 진행합니다. 이 심볼 해석이 완료된 오브젝트 파일은 Relocatable Object Module로 변경됩니다.

Symbol 종류

Global symbol -> 모든 파일에서 접근 가능한 symbol, 프로그램 전체에서 사용됨. ex)nont-static 함수, 전역변수

Local symbol ->  오로지 그 내부에서만 참조할 수 있는 심볼 ex) 일반 함수,static으로 선언된 함수내 전역변수

 

 

   4.심볼과 주소 바인딩(Relocation)

      -해석된 Relocatable Object Module을 이용해 심볼과 주소를 연결해 하나의 실행파일로 만듭니다. 현재 오브젝트 파일안에는 실제 메모리 상의 주소가 들어있지않아 링커가 메모리상의 주소로 변환하는 작업을 실행해야합니다. 심볼들의 모든 주소 참조를 해석하여 실제 메모리상의 주소로 변환을 합니다. 이 과정에서 정적 바인딩과 동적바인딩이 있는데 정적 바인딩은 컴파일 시점에서 모든 심볼을 결정하는 것,동적 바인딩은 실행 시점에 심볼을 결정하는 것 입니다.

 

   5.링크 결과 생성

      -링크 결과를 생성해 실행파일을 생성합니다.

 

 

 

정적링킹(Static Linking) vs 동적링킹(Dynamic Linking)

   -정적링킹은 링커가 오브젝트파일을 실행파일로 생성할 때 모든 라이브러리 함수들을실행 파일에 포함시키는 링킹 방식입니다. 이 방식으로 실행파일이 모든기능을 갖춰 독립적으로 동작할 수 있지만, 실행파일의 크기가 커진다는 특징과 라이브러리 업데이트 시에 다시 빌드해야 한다는 특징이 있습니다.

 반면에, 동적링킹은 링커가 실행파일을 생성할 때 필요한 라이브러리 함수를 동적으로 로드하는 방식입니다. 전체를 다 로드하지않고 필요한것만 로드하기 때문에 파일크기가 작아지며,업데이트가 용이합니다. 다만실행파일이 실행될 때 라이브러리 함수를 로드해야하므로 초기 실행 속도가 정적링킹에 비해 느릴 수 있습니다.

 

'OS' 카테고리의 다른 글

프로그램 -> 프로세스 변환과정 (컴파일)  (0) 2023.04.06
파일모드란?  (0) 2023.04.06
LR 파싱 과정  (0) 2023.04.04
cpu 명령어 모음  (0) 2023.03.30
fork() 시스템 콜 (부모프로세스 자식프로세스)  (0) 2023.03.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함