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 과의 비교 (장점)
- 실행 파일의 메모리 절약이 가능하다.
- RAM 메모리 절약이 가능하다. (여러 파일에서 같은 dll 파일을 사용하더라도 RAM에는 하나의 dll 파일만 올라가있게 된다.
프로젝트에 오픈 소스 적용 시 주의 사항
컴파일 과정만 거친 경우 실행은 되지 않는다.
실행만이 목적이라면, lib, include 파일과 관계없이 dll파일이 exe와 같은 디렉토리에 있는 경우 실행 성공
- 오픈 소스 테스트 및 디버깅 : lib, include 파일 필요
- 실행 : dll 파일 필요
중요! lib 파일 연결 링커 설정
- 링커 > 일반 > 추가 라이브러리 디렉터리 : lib 파일 경로 입력
- 링커 > 입력 > 추가 종속성 : lib 파일명 입력
include(헤더) 파일 연결
- C/C++ > 일반 > 추가 포함 디렉터리 : 헤더 파일 경로 입력
dll 연결
- 디버깅 > 환경 : dll 파일 경로 입력