- DLL - 동적 라이브러리
- LIB - 정적 라이브러리
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을 통해 부를 수 있는 함수