프로그램 빌드란?
프로그래머가 작성한 소스코드를 실행 파일을 만들기 까지의 과정이다.
프로그램 빌드 방식은 3가지 방식 이 존재 한다.
1. compile 방식 - 프로그래머가 작성한 모든 코드를 한꺼번에 빌드 한다.
2. interpreted 방식 - 소스코드를 한줄 씩 빌드 한다.
3. Hybrid 방식 - 위 두가지 방식을 적절히 함께 사용한다.
여기서는 가장 많이 쓰이고 대중적인 compile 방식을 집중적으로 다룬다.
컴파일 방식 빌딩은 위의 과정을 따른다. (위의 그림은 각 과정과 그에 따라 만들어지는 파일의 확장자를 보여준다.)
1. 전처리기 # include
# 뒤에 있는 코드를 실행 하는 부분으로 전처리 후에 코드에는 전처리 구문에 포함된 코드가 추가된다.
대표적으로 #include 오 #define 이 존재한다.
밑의 소스를 전처리 해보자.
전처리후
2. 컴파일
- 1) 어셈블리어 컴파일 위의 전처리된 i 파일을 어셈블리어로 구성된 코드로 변환 시켜준다.
-2) 어셈블리어로 구성된 코드를 기계어로 만들어 준다.
3. 링커
만들어진 obj 파일과 사용되는 함수들이 들어있는(라이브러리) lib 파일을 이용해서 실행 파일로 만들어준다.
cf) 링커 과정에서 소스 코드가 사용하는 변수나 함수가 존재 하지 않는경우 link 에러가 뜬다.
-> 개인적으로 가장 잡기 어려운 오류 같다. 특히 함수의 오탈자를 조심하자
c 언어에서 함수의 경우 오타가 존재하더라도 다른 라이브러리에 포함 되어 있을 수 있어서 오류 가 뜨지 않고 링커 과정에서 라이브러리들을 합칠때 오류를 감지하고 링커 에러가 뜬다.
결론 : exe 파일 생성
출처:https://reakwon.tistory.com/52
[C언어] 컴파일 과정(Compile Process) 4단계 자세한 설명
컴파일 과정 Visual Studio에서 우리는 실행할때 F5(또는 Ctrl+F5)를 눌러서 우리가 만든 소스코드를 실행시켜봤죠? 우리는 너무 쉽게 프로그램을 실행시킨다고 생각할 수 있지만 의외로 몇몇 단계를
reakwon.tistory.com
cf ) #include<stdio.h> 와 lib 파일 차이
아마 프로그램 빌딩 과정을 제대로 이해 했다면
굳이 전처리 과정이 필요한가에 대해 궁금증이 생길 것이다. (나는 그럼)
include 는 그냥 다른 프로그래머가 만들어 놓은 다양한 상수 변수들을 코드에 추가 시켜 주는거고 lib 파일 또한 다른 프로그래머 들이 만든 코드(라이브러리)를 추가한다 (다만 lib 파일은 기계어 이고 # 은 c언어 코드이다.)
간단히 생각해보면 코드를 추가하고 다시 기계어로 빌딩 하는 과정을 거치는 것보다 그냥 stdio.h 파일도 lib 로 만들어서 링크 과정에서 obj 파일과 합쳐주면 좋을 것 같다. 하지만 이렇게 한다면
문법 검사에서 문제가 생긴다.
stdio.h 안에 포함되어 있는 printf() 의 경우 printf("%d","string") 처럼 입력하면 주소 값을 정수 형식으로 표현 한다는
주의가 뜬다 이러한 문법적인 검사가 어셈블어 컴파일 과정에서 이루어 지기 때문에 미리 코드를 붙여서 프로그래머가 문법적인 오류를 가지지 않는지 검사해준다.
만약 stdio.h 가 lib 파일로 존재 했다면 printf 의 문법적인 오류를 검사하지 못하고 링크 과정에서야 문제를 발견하고 link 에러가 뜰것이다.
'기타' 카테고리의 다른 글
stirng 은 readonly 속성이다. (0) | 2021.06.13 |
---|---|
cl 빌드 과정에서 경유파일 생성 방법 (0) | 2021.06.02 |
도스창에서 c언어 컴파일 & 빌드 (0) | 2021.06.01 |
magic number (0) | 2021.06.01 |
pc 고정 ip주소 설정 (0) | 2021.05.26 |
댓글