전처리기: 주석을 제거하고, 헤더 파일을 병합하는 등의 작업을 수행
컴파일러: 전처리된 소스 코드의 오류 처리 및 코드 최적화를 수행하며, 고수준 프로그래밍 언어로 작성된 코드를 어셈블리어로 변환
어셈블러: 컴파일러에서 생성된 어셈블리어 코드를 목적 파일로 변환
링커: 프로그램에 사용된 라이브러리 함수와 목적 파일을 결합하여 실행 파일을 생성
- 라이브러리의 코드와 데이터는 프로그램의 실행 파일에 직접 포함
- 각각의 프로그램마다 라이브러리의 복사본이 생성되기 때문에 메모리 사용량이 증가하고 디스크 공간을 차지
- 실행 파일이 라이브러리와 함께 패키지되어 이식성이 높고 외부 의존도가 낮음
- 프로그램이 실행될 때 필요한 라이브러리가 메모리에 로드
- 여러 프로그램이 동일한 라이브러리를 공유할 수 있으므로 메모리 공간을 절약하고 디스크 공간도 절약
- 라이브러리 업데이트 시 모든 응용 프로그램이 자동으로 업데이트되고, 런타임 중에 라이브러리를 교체할 수 있음
- 동적 라이브러리를 로드하고 함수를 실행하는 과정은 정적 라이브러리에 비해 더 많은 시간을 소비할 수 있음
- 잘못된 라이브러리 버전을 사용하거나 라이브러리 파일을 찾을 수 없는 경우 문제가 발생할 수 있는 등 외부 의존도가 높아짐