DLL과 LIB

Jayce_97·2024년 5월 13일
0

C++

목록 보기
1/1
post-thumbnail
  • DLL - 동적 라이브러리
    • Runtime 중에 활성화
  • LIB - 정적 라이브러리
    • Compile 중에 활성화

1) lib

  • Link 단계에서 정적으로 라이브러리 파일을 추가
    • 일반적으로 실행 파일을 만들 때는 소스 코드를 컴파일하고 만들어진 obj 파일을 링커가 하나로 묶어 exe 파일을 만듬

    • lib를 사용하면 링크 단계에서 링커가 lib 파일도 같이 묶어서 하나의 exe 파일 생성

      → 쉽게 말하면 컴파일에 성공해 만들어지는 exe파일 안에 lib 내용이 포함

  • 미리 컴파일 된 헤더 pch와의 차이
    - pch는 전처리기가 헤더 파일의 내용을 가져와서 컴파일러가 그 내용을 컴파일
    - lib는 이미 컴파일된 obj 파일을 가지고 링커가 연결만 시킴
    - pch는 사용하고자 하는 곳에 모두 명시하지만 lib는 생략가능
    - 파일 크기가 커지는 단점이 생김(dll로 보완)

    pch란?
    프로젝트가 커짐에 따라 컴파일 시간을 줄이기 위해 자주 변경되지 않는 긴 소스를 미리 컴파일해두고 컴파일 결과를 별도의 파일에 저장해 다시 컴파일하지 않는 것

  • lib을 만들고 다른 프로젝트에서 사용할 때 주의점 2가지
    • 링커에게 해당 lib 경로를 지시
    • 해당 include(header)의 경로 지시

2) dll (Link 단계에서 동적으로 라이브러리 파일을 추가)

  • dll은 lib와 달리 파일을 실행할 때 링커가 dll의 위치를 알고 있다면 exe파일에 내용이 포함되어 있지 않아도 실행 가능
  • 즉 동적인 링킹이 가능
    • dll은 프로세스의 주소 공간에 동적으로 로드 가능하게 만들어짐
  • 동적인 링킹 장점
    • 실행 파일의 메모리 절약이 가능
    • RAM 메모리 절약 가능, 2개 이상의 파일에서 하나의 dll 파일을 사용할 때 RAM에는 하나의 dll 파일만 올라감
  • 링킹 방법
    • dll은 프로세스의 주소 공간에 로드 되어야 사용 가능
    • 암시적 링킹
      • 실행 파일 자체에 어떤 dll의 함수를 사용하겠다는 정보를 포함시키고 OS가 프로그램 실행시 해당 함수들을 초기화 후 사용
    • 명시적 링킹
      • 프로그램이 실행 중일 때 dll 파일이 있는지 검사하고 동적으로 원하는 함수만 불러와서 쓰는 방법
  • dll파일 사용
    • 명시적 링킹
      • 직접 코드를 통해 원하는 함수 호출(함수 포인터)
    • 암시적 링킹
      • dll 생성할 경우 2개의 파일 생성, (.dll , .lib)
      • 여기서 만들어진 lib 파일은 정적 라이브러리가 아니라 dll을 통해 부를 수 있는 함수
profile
AI (ML/DL) 학습

0개의 댓글