ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Static Link(정적 링크) Dynamic Link(동적 링크)
    Operating System 2020. 4. 28. 15:52

    소스코드를 컴파일하면 목적 파일이 생성된다. 그런데 이 목적 파일을 실행파일로 만들기 위해서는 링크 단계를 거치게 되는데 이때 라이브러리 함수를 사용했다면 이 라이브러리 파일이 정적 라이브러리 파일인지 동적 라이브러리 파일인지에 따라서 프로그램 동작이 다르다.(라이브러리 파일을 만들 때 정적 라이브러리 파일로 만들면 정적 링크를 해야 되고 동적 라이브러리 파일로 만들면 동적 링크를 해야 한다.)

     

    johnjarrer.tistory.com/139

     

    Static Library(정적 라이브러리) Dynamic Library(동적 라이브러리)

    리눅스는 다음과 같은 확장자를 가진다. *.a 정적 라이브러리 파일 *.so 동적 라이브러리 파일 (so: shared object) 윈도우는 다음과 같은 확장자를 가진다. *.lib 정적 라이브러리 파일 *.lib *.dll 동적 라�

    johnjarrer.tistory.com

    Static Link(정적 링크)

    링커는 정적 링크 시 소스코드를 컴파일해서 나온 목적 파일과 정적 라이브러리 파일(*.a or *.lib)을 합쳐 하나의 실행파일을 만든다. 이렇게 나온 실행파일은 라이브러리가 포함되어있어 단독으로 실행이 가능하다. 우리가 어떤 *.exe 파일만을 다운로드하고 설치는 하지 않았지만 실행이 가능한 경우와 비슷하다.??

     

    Dynamic Link(동적 링크)

    동적 링크로 만들어진 실행파일과 동적 라이브러리 파일(*.a or *.lib)을 따로 메모리에 올라간다.

    동적 링크에는 묵시적 링크와 명시적 링크가 있다.

     

    Implicit Link(묵시적 링크)

    링커는 묵시정 링크 시 소스코드를 컴파일해서 나온 목적 파일과 동적 라이브러리의 어떤 함수를 사용하겠다는 정보가 합쳐 하나의 실행파일을 만든다. 그래서 프로그램 실행 시 동적 라이브러리의 어떤 함수를 사용하겠다는 정보로 동적 라이브러리 파일에서 해당 함수를 메모리에 올려 사용한다.

     

    Explicit Link(명시적 링크)

    링커는 명시적 링크 시 소스코드를 컴파일해서 나온 목적파일과 동적 라이브러리의 어떤 함수를 사용하겠다는 정보가 없다. 대신 프로그램 동작 시 소스코드에서 사용한 API 함수로 사용하려는 라이브러리 파일이 있는지 검사하고 동적으로 해당 함수를 메모리에 올린다.

     

     

     

    요약하면

    정적 링크로 만들어진 프로그램은

    1. 라이브러리를 내리려면 프로그램도 같이 내려야 하고 올리려면 프로그램도 같이 올려야 한다.
    2. 실행파일에 포함된 라이브러리 함수만 실행 가능하다.
    3. 동적으로 라이브러리를 올리지 않아 빠르다.
    4. 하나의 라이브러리를 여러 프로그램이 사용했다면 각 프로그램 마다 똑같은 라이브러리가 포함되어 메모리 자원이 낭비된다.

     

    동적 링크(묵시적 링크)로 만들어진 프로그램은

    1. 프로그램 실행 시 라이브러리를 올린다.
    2. 프로그램을 내려도 라이브러리는 메모리에 남아있다.
    3. 다른 프로그램에서 다른 라이브러리를 참조하여 사용할 수 있다.(공유 라이브러리인 듯?)
    4. 하나의 라이브러리를 여러 프로그램이 사용했다면 각 프로그램은 같은 라이브러리를 참조하므로 메모리 자원이 낭비되지 않는다.
    5. 동적 라이브러리 파일을 찾지 못하면 런타임 에러가 뜬다.
    6. 라이브러리를 실행파일과 따로 올려 동적 링크라 불리긴 하지만 사실 정적 링크랑 비슷하다.

     

     

     

     

    동적 링크(명시적 링크)로 만들어진 프로그램

    1. 프로그램 동작 중에 라이브러리를 올린다.
    2. 라이브러리를 따로 내리고 올릴 수 있다.
    3. 상황에 따라 다른 라이브러리를 사용해야 할 경우 좋다.(선택할 수 있다.)
    4. 라이브러리가 필요 없으면 내리면 되니까 메모리 자원이 낭비되지 않는다.
    5. 하나의 라이브러리를 여러 프로그램이 사용했다면 각 프로그램은 같은 라이브러리를 참조하므로 메모리 자원이 낭비되지 않는다.
    6. 라이브러리를 동적으로 올려야 하기 때문에 느리다.
    7. API 함수를 사용해야 한다.
    8. 동적 라이브러리 파일을 못 찾으면 런타임 에러가 뜬다.
    9. 내가 필요하면 올리고 필요 없으면 내리는 이게 진짜 동적 링크다

     

     

    틀린 점이 있다면 댓글 부탁드리겠습니다. 감사합니다.

    댓글

Designed by Tistory.