상세 컨텐츠

본문 제목

compile

카테고리 없음

by yejin123 2023. 9. 5. 18:01

본문

컴퓨터는 0과 1로 이루어진 이진코드로 모든 명령을 이해하고 실행한다.

내가 컴퓨터에게  "안녕"이라는 문자를 입력해도 컴퓨터는 이것을 이진코드로 해석한다, 그렇담 이 "안녕"이라는 문자를 어떻게 해석을 할것 인가에 대한 기능을 컴파일이라고 한다.

 

컴파일(compile) : 사람이 이해하는 언어를 컴퓨터가 이해할 수 있는 언어로 바꾸어 주는 과정

 

컴파일 과정 4단계

 

1. 전처리(Pre-processing) 과정

전처리기를 통해 소스코드 파일(.c)을 전천리된 소스 코드 파일 (.i)로 변환하는 과정이다.

 헤더 파일(.h) + 소스 코드 파일(.c) = 전처리 된 소스 코드 파일(.i)

 

(1). 주석제거 : 소스 코드에서 주석을 전부 제거한다.

 

(2). 헤더 파일 삽입 : #include 지시문을 만나면 해당하는 헤더 파일을 찾아 헤더 파일에 있는 모든 내용을 복사해서 소스 코드에 삽입한다. 

(3). 매크로 치환 및 적용 : #define 지시문에 정의된 매크로를 저장하고 같은문자열을 만나면 #define된 내용으로 치환한다. 간단하게 말해서 매크로 이름을 찾아서 정의한 값으로 전부 바꿔준다.

 

매크로 : 컴퓨터 용어에서 매크로는 여러 개의 명령을 기억해서 하나의 단축키로 실행하는 기능

= 반복작업을 자동화 시키는 컴퓨터 프로그램

 

2. 컴파일(Compileation) 과정

컴파일러를 통해 전처리된 소스 코드 파일(.i)을 어셈블리어 파일(.s)로 변환하는 과정이다.

컴파일러 : 특정 프로그램 언어로 쓰여 있는문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램이다.

 

3. 어셈블리(Assembly) 과정

어셈블리어 :기계와 1대1 대응이 가능한 컴퓨터 프로그래밍의 저급 언어이다.

0과 1의 이진수로 프로그램을 하는 기계어는 사람이 봤을 때는 
알아보는 게 거의 불가능하고 이를 보완해서 나온 언어가 어셈블리 언어입니다. 

기계어가 CPU의 종류에 따라 다르기 때문에 어셈블리어와 호환성이 잘되어있지않은 언어이다.

 

어셈블리과정은 어셈블러를 통해 어셈블리어 파일(.s)을 오브젝트 파일(.o)로 변환하는 과정이다.

여기서 오브젝트 파일(Object File)이란 어셈블리코드는 이제 더 이상 사람이 알아볼 수 없는 기계어로 변환되는데 이를 오브젝트 코드라고 부른다.

 

4. 링킹(Linking) 과정

링커를 통해 오브젝트 파일(.o)들을 묶어서 실행 파일로 만드는 과정이다.

이 과정에서 오브젝트 파일들과 프로그램에서 사용하는 라이브러리 파일들을 링크하여 하나의 실행 파일로 만든다.

 

Static link : 정적 라이브러리는 정적 링킹(Static Linking) 과정에서 링커가 프로그램에 필요로 하는 부분을 라이브러리에서 찾아 실행 파일에 복사하는 방식의 라이브러리를 의미한다.

 

Dynamic link : 링커가 라이브러리 내용을 복사하지 않고 해당 내용의 주소만 가지고 있다가 런타임에 실행 파일과 라이브러리가 메모리에 위치할 때 해당 주소로 가서 필요한 내용을 가져오는 방식의 라이브러리를 의미한다.