일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 프로그래머스
- 알고리즘
- Ultimate Search
- baekjoon
- 백준
- 자소서
- 백트래킹
- 알고리즘 종류 정리
- python3
- DP
- GitHub Desktop
- 프로콘
- algorithm
- 격리수준
- 리트코드
- Github
- 취준
- Algorithmus
- programmers
- 프로콘 갈림현상
- git
- Python
- Pro-Con
- 네이버 검색 시스템
- 코딩테스트
- LeetCode
- ASF-110
- 제노블레이드 2
- C++
- SRE
- Today
- Total
산타는 없다
C++ 소스 코드 빌드 과정 본문
작성한 소스코드는 빌드 과정을 통해 실행할 수 있는 실행파일이 됩니다.
각 언어별로 빌드하는 과정과 실행하는 방법이 다른데
C++의 경우 어떻게 빌드가 되는지 정리해 보겠습니다.
C++ 컴파일러
C++의 빌드 과정에서 빼먹을 수 없는 것이 컴파일러입니다. C++의 경우 운영체제 별로 컴파일러가 다릅니다.
자바의 경우 자바 컴파일러가 소스코드를 바이트 코드로 변환시키고 만들어진 바이트 코드를 각 운영체제에 맞는 JVM 내에 로드하여 실행합니다. 때문에 자바는 운영체제에 맞는 JVM이 있다면 소스코드 수정 없이 프로그램을 실행할 수 있습니다.
하지만 C++은 운영체제 별로 컴파일러가 다르기 때문에 소스코드를 각 컴파일러에 맞게 수정해야되는 상황이 있을 수 있습니다.
빌드 과정
전체적인 과정을 그림으로 표현한다면 다음과 같습니다.
전처리
C++ 소스 코드에서 #include나 #define, #ifdef 등을 컴파일러가 이해할 수 있도록 코드로 변환시켜 줍니다. #include 같은 경우는 헤더 파일(. h)의 내용을 삽입해 주고 #define은 해당 값으로 치환해주고 #ifdef 같은 경우는 지정한 define 값이 있거나 없을 때 작성한 소스코드로 치환합니다.
컴파일
각 운영체제에서 사용할 수 있는 컴파일러로 전처리가 완료된 C++ 코드를 컴파일합니다. 컴파일 과정은 front어휘 분석 -> 구문 분석 -> 의미 분석 -> 코드 생성의 순서로 진행됩니다. 컴파일이 완료된 C++ 소스코드는 어셈블리어로 변환됩니다.
어셈블
어셈블리어로 변환된 소스코드를 컴퓨터가 이해할 수 있도록 어셈블러를 통해 기계어로 번역해줍니다. 0, 1로 이루어져 있으며 오브젝트 코드라고 불립니다. 오브젝트 코드는 링킹 과정에서 필요한 정보를 가지고 있습니다.
링킹
위의 과정을 거쳐 번역된 오브젝트 코드는 링커를 통해 다른 오브젝트 코드 또는 Lib(정적 라이브러리)와 연결되어 실행가능한 프로그램으로 만들어집니다.
'Programming Language > C++' 카테고리의 다른 글
오버라이딩(재정의) 시 주의사항 (0) | 2021.08.17 |
---|---|
상속 시 생성자와 소멸자 실행순서, 그리고 주의할 점 (0) | 2021.08.17 |