Static lib vs Shared lib (.lib vs .dll)

배경

C++ 프로그램을 만들 때 외부 라이브러리를 사용해서 재사용 가능한 함수/루틴/클래스 등을 사용할 수 있습니다.

이러한 라이브러리들은 2가지 형태로 사용할 수 있습니다.

 


Static library (.lib / .a)

컴파일 단계에서 외부 함수나 루틴을 링크하는 방법입니다.

코드 자체가 프로그램 내부에 들어가게 되는데, 이 때문에 프로그램의 용량이 커지게 됩니다.

하지만 컴파일 단계에서 코드가 링크되기 때문에, 런타임에서 굉장히 빠르게 작동합니다.

Shared library (.dll / .so / .dylib)

런타임에서 다이나믹 링크하는 방법입니다.

함수나 루틴이 사용될 때마다 해당 기능을 외부 라이브러리에 참조하여 사용하는 방식입니다.

코드 자체가 프로그램 내부에 들어가지 않기 때문에 프로그램의 용량은 작게 유지할 수 있습니다.

하지만 외부 라이브러리를 사용하기 위해서 라이브러리 파일을 항상 가지고 다녀야합니다.

또, 함수나 루틴을 사용할 때 마다 외부 라이브러리를 참조해야하기 때문에 런타임에 cost가 생겨납니다.