엔지니어가 되고 싶은 공돌이

10. Linking 본문

Computer Science/System Programming

10. Linking

Geca 2025. 2. 12. 22:06

 

10. 1. Linker

 

- Linking: 여러 개의 object file을 모아서, 하나의 execution file로 변환하는 과정.

 

- Linker: Linking을 수행하는 Program.

 

 

- Why Use a Linker?

 

1) Linking이 필요한 이유는 오늘날 소프트웨어 개발은 하나의 커다란 파일 또는 모듈에서 이루어지는 것이 아닌 여러 개의 작은 파일 또는 모듈에서 개발되기 때문에 이를 통합할 수 있는 과정이 필요합니다.

 

2) 작은 모듈로 나누어져 있기 때문에 모듈 하나를 수정해도, 다른 모듈들을 재컴파일 할 필요 없이 수정된 모듈만 컴파일하면 되므로, 효율성(Efficiency in Time and Space)이 좋아집니다.

 

 

- What does a Linker do?

 

1) 여러 개의 Object File을 통합하여, 하나의 Excutable File을 만듭니다.

 

2) Symbol(Function and Variable Memory Address) Relocation(재배치)합니다.

  다시 말해, .o에서 상대적으로 정의된 주소를, Excutable File에서는 절대적인 주소로 변경합니다.

 

3) Symbol Resolution을 통해 같은 이름의 Symbol이 있으면, 어떤 Symbol을 사용할지 결정합니다.

 

  - Strong Symbol: Procedures and Initialized Global Variables.

 

  - Weak Symbol: Uninitialized Global Variables.

 

  - 이름이 같다면 Weak Symbol은 Strong Symbol에 의해 Override 될 수 있으며,

 

     Weak Symbol이 여러 개라면 Linker가 임의로 선택합니다.

 

     Strong Symbol은 오직 한 번만 나와야 합니다.

 

 

- ELF(Executable and Linkable Format): Linker가 동작하기 위해 필요한 Standard Format.

이 Format에 맞춰서 Executable File을 만듭니다.

 

 

- SymbolDefinitionsReferences를 가지며, References에는 Local, External 2종류가 있습니다.

  Local은 같은 파일 또는 모듈안에, External은 다른 파일 또는 모듈에 있는 Symbol을 말합니다.

 


 

 

10. 2. Library

- Library: 프로그래밍에 사용할 수 있게 미리 정의된 함수와 변수들의 집합.

 

- Library는 시간단축을 위해 바로 Linking 될 수 있도록 Object File로 Compile 되어 있습니다.

 

 

- LIB(Static Link Library): Linking 단계에서 Library Object File을 그대로 넣습니다.

 

  Pros: 외부를 참조할 필요가 없어 속도가 빠릅니다.

 

  Cons: Library의 용량이 커서 프로그램의 크기가 커지며, 같은 Library를 가진 여러 개의 Program을 실행하게 되면 Memory 공간을 낭비하게 됩니다.

 

 

- DLL(Dynamic Link Library): Linker가 Library를 복사하지 않고, Address만 가지고 있다가, Excutable File에서 해당 Library가 필요할 경우, 필요한 내용을 가져오는 방식입니다.

 

Pros: 상대적으로 파일의 크기가 작아지고, Memory공간을 절약할 수 있습니다.

 

Cons: 이식성이 낮아지고, 또 Address를 찾는과정에서 성능 저하가 발생할 수 도 있습니다.


'Computer Science > System Programming' 카테고리의 다른 글

09. Assembly 4: Complex Data Types  (0) 2025.02.11
08. Assembly 3: Procedures  (0) 2025.02.10
07. Assembly 2: Control Flow  (0) 2025.02.07
06. Assembly 1: Basic Operations  (0) 2025.02.06
05. Program and Instruction Set  (0) 2025.02.06
Comments