[C] 프로그램의 빌드 과정
카테고리: C
태그: Build
이 글은 C 프로그램 빌드 과정을 공부하고 정리한 글입니다
📕 빌드란 무엇인가?
- 사람이 읽기 쉬운 소스코드를 기계어 명령어로 변환하는 과정
- 명령어들을 모아 기계에서 실행 가능한 실행파일로 만드는 과정
📕 빌드과정
- 전처리 (preprocessing)
- 컴파일 (compilation)
- 어셈블 (assembling)
- 링크 (linking)
📖 전처리 (preprocessing)
- 전처리기라는 프로그램이 담당
- 처리 과정
- 주석 제거
- 매크로를 복사붙여넣기
- 인클루드 파일들을 복사붙여넣기
- 출력 : 확장된 소스코드 (트랜슬레이션 유닛)
📖 컴파일 (compilation)
- 컴파일러라는 프로그램이 담당
- 출력 : 전처리 과정에서 나온 트랜슬레이션 유닛을 어셈블리어 코드로 만든다
- 어셈블리어 코드 : 기계 코드와 거의 1:1로 대응한다(하드웨어에 아주 가까움)
- 어셈블리어 코드는 아직 정의를 모르는 심볼을 사용할 수 있음
- 심볼(symbol) : 함수나 변수의 이름 등
- 이것이 바로 헤더를 통한 선언만으로 컴파일이 가능한 이유
- 컴파일러가 어떤 함수나 변수의 정의를 못 찾을 경우
- 함수나 변수의 주소를 구멍으로 남겨둔다
- 그 남겨진 구멍을 메꾸는 건 링크단계에서 해준다
📖 어셈블 (assembling)
- 어셈블러라는 프로그램이 담당
- 출력 : 컴파일 과정에서 나온 어셈블리어 코드를 오브젝트 코드로 만든다
- 오브젝트 코드 : 기계가 곧바로 이해 가능한 기계코드(이진코드)
📖 링크 (linking)
- 링커라는 프로그램이 담당
- 모든 오브젝트 코드들을 모아 구멍을 메꾼 뒤 실행파일로 저장
- 이 과정에서 함수 주소를 찾아 구멍을 메꾸어 주고
- 만약 정의를 찾지못해서 남아있는 구멍이 있다면 링커 오류를 낸다
참조
💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸
댓글 남기기