lib와 dll을 사용하는 이유는
작성한 소스코드를 모듈화하여 재사용하기 위함이고,
lib은 정적 라이브러리라는 명칭을 가지며, 하나의 빌드 단위에 포함되어 함께 빌드된다. 따라서, 컴파일러 최적화를 최대한 활용할 수 있다는 장점이 있다. 하지만, 멀티프로세스 환경에서 같은 라이브러리를 포함하는 프로세서가 많이 동작할 경우, 메모리가 많이 소요된다.
dll은 동적 라이브러리라는 명칭을 가지며, 동적으로 메모리에 로드되어 다른 프로세스들이 사용할 수 있게 된다. 어떤 빌드에 함께 포함되지 않기 때문에 컴파일러 최적화에 제한이 생겨 비교적 성능이 떨어지지만, 메모리를 절약할 수 있다는 장점이 있다.
dll은 보통 헤더와 lib 파일와 함께 제공되어 lib 파일을 거쳐 dll을 사용할 수 있게 하는 것 같다. (dll을 호출하는 부분을 Wrapping하는 느낌이다.)