언어/C++

[c++] 라이브러리 (dll, lib)

서병렬 2023. 9. 2. 10:08

dll : 동적 라이브러리 lib : 정적 라이브러리

dll은 런타임 중에, lib는 컴파일 중에 필요하다.

lib

소프트웨어 실행 파일을 만들 때 소스 코드를 컴파일하고 만들어진 obj 파일을 링커가 하나로 묶어 exe 파일을 든다.

이 때 lib 을 사용하면 링크 단계에서 링커가 lib 파일도 같이 묶어서 하나의 exe 파일을 만들게 된다.(exe 파일이 무거워 진다.)

정적 라이브러리이므로, 많이 사용되면 RAM에 메모리가 많이 올라가게 된다.

pch : 전처리기가 헤더 파일의 내용을 가져와서 같이 컴파일함

pch와 lib의 차이점으로는, pch와 달리 lib 은 이미 컴파일 되어있으며, obj 파일을 가지고 링커가 연결만 시켜준다는 것이다. 또한, pch는 사용하려는 모든 곳에 명시해야한다.

dll

소스 코드 컴파일 이후 obj 링크 단계에서 동적으로 라이브러리 파일을 추가한다.

dll 은 lib 과 달리 파일을 실행할 때, 링커가 dll 의 위치를 알고 있다면 exe파일에 내용이 포함되어있지 않지만, dll 파일 디렉토리를 exe파일이 잘 알고만 있다면, dll 파일 안의 내용을 사용할 수 있다.

lib 과의 비교 (장점)

  1. 실행 파일의 메모리 절약이 가능하다.
  2. RAM 메모리 절약이 가능하다. (여러 파일에서 같은 dll 파일을 사용하더라도 RAM에는 하나의 dll 파일만 올라가있게 된다.

프로젝트에 오픈 소스 적용 시 주의 사항

컴파일 과정만 거친 경우 실행은 되지 않는다.

실행만이 목적이라면, lib, include 파일과 관계없이 dll파일이 exe와 같은 디렉토리에 있는 경우 실행 성공

  • 오픈 소스 테스트 및 디버깅 : lib, include 파일 필요
  • 실행 : dll 파일 필요

중요! lib 파일 연결 링커 설정

  1. 링커 > 일반 > 추가 라이브러리 디렉터리 : lib 파일 경로 입력
  2. 링커 > 입력 > 추가 종속성 : lib 파일명 입력

include(헤더) 파일 연결

  • C/C++ > 일반 > 추가 포함 디렉터리 : 헤더 파일 경로 입력

dll 연결

  • 디버깅 > 환경 : dll 파일 경로 입력