본문 바로가기
카테고리 없음

linker5

by sarberos 2022. 4. 7.

Linker가 있기 전에는

필요한 function과 파일을 모두 일일히 넣어주어야 할 것이다.

 

그래서 나온 것이 libraries

 

Static libraries(.a archive files)

index와 함께 여러 관련된 파일들을 모아둔것.

필요한 파일들만 붙여서 resolution해서 link해서 exacutable을 만든다.

 

하나의 라이브러리 안에는 다양한 오브젝트 파일이 들어있다.

 

가장 많이 사용하는 것

  • libc.a(C standard library)
  • libm.a(the C math library)

Link를 하면 여기서 필요한 파일만 꺼내 사용한다.

Link에 어떤 파일을 사용하는지 명시해주어야 한다.

 

 

Using Static Libraries

먼저 .O와 .a 파일을 스캔한다.

스캔하면서 symbol을 resolve한다.

마지막까지 resolve 되지 않으면 오류.

- command line에서 순서가 중요하다.

일반적으로 라이브러리는 마지막에 둔다.

 

Loading Executable Object Files

 

Complie후 R/W , Read only data로 분리 가능하다.

static library(.a)는 read-only segment에 들어간다.

shared libraries는 여러 프로세스에서 사용되는 library로(printf 등) Memory-mapped region에 들어간다.

 

Shared Libraries

 

자주 사용되는 라이브러리, 여러 프로세스에서 사용되는 라이브러리, load-time이나 run-time에서 사용되는 라이브러리는 Shared libraries를 사용한다.

윈도우에서는 DLL(dynamic link libraries), Unix에서는 .so이다.

 

static libraries에 비해 사소한 bug fix에 유리하다.

 

일반적으로 load time에 링크한다.

ld-linux.so

 

Run-time에도 linking가능하다.

dlopen()을 사용한다. (dynamic library open)

 

이런 shared library는 여러 process에서 사용가능하다.

이런 shared library는 local variable을 가지고 있으면 안된다.

여러 process가 서로 변수를 저장하면 안되므로.

 

Dynamic Linking at Load-time

 

메모리에 올라오면서 fully linked되고 , 그 이전에는 부분적으로 임시로 linked된다.

댓글