프로그램의 컴파일 과정

이태곤·2023년 11월 1일
0

Operating System

목록 보기
7/13
post-thumbnail

1. 프로그램의 컴파일 과정

  • 프로그램의 소스 코드가 컴파일러를 통해 기계어로 번역되고,. 목적 파일로 생성된 후 링커를 통해 외부 라이브러리와 연결되어 최종적으로 실행 파일이 생성되는 과정

  1. 전처리기: 주석을 제거하고, 헤더 파일을 병합하는 등의 작업을 수행

  2. 컴파일러: 전처리된 소스 코드의 오류 처리 및 코드 최적화를 수행하며, 고수준 프로그래밍 언어로 작성된 코드를 어셈블리어로 변환

  3. 어셈블러: 컴파일러에서 생성된 어셈블리어 코드를 목적 파일로 변환

  4. 링커: 프로그램에 사용된 라이브러리 함수와 목적 파일을 결합하여 실행 파일을 생성


2. 정적 라이브러리 & 동적 라이브러리

  • 정적 라이브러리: 프로그램 빌드시에 라이브러리가 제공하는 모든 코드를 실행 파일에 넣는 방식
    • 라이브러리의 코드와 데이터는 프로그램의 실행 파일에 직접 포함
    • 각각의 프로그램마다 라이브러리의 복사본이 생성되기 때문에 메모리 사용량이 증가하고 디스크 공간을 차지
    • 실행 파일이 라이브러리와 함께 패키지되어 이식성이 높고 외부 의존도가 낮음
  • 동적 라이브러리: 런타임시에 라이브러리 코드 및 함수 정보를 참조하여 사용하는 방식
    • 프로그램이 실행될 때 필요한 라이브러리가 메모리에 로드
    • 여러 프로그램이 동일한 라이브러리를 공유할 수 있으므로 메모리 공간을 절약하고 디스크 공간도 절약
    • 라이브러리 업데이트 시 모든 응용 프로그램이 자동으로 업데이트되고, 런타임 중에 라이브러리를 교체할 수 있음
    • 동적 라이브러리를 로드하고 함수를 실행하는 과정은 정적 라이브러리에 비해 더 많은 시간을 소비할 수 있음
    • 잘못된 라이브러리 버전을 사용하거나 라이브러리 파일을 찾을 수 없는 경우 문제가 발생할 수 있는 등 외부 의존도가 높아짐

0개의 댓글