* 인터넷 검색의 결과로 한 포스팅이기 때문에 사전적 의미나 정확한 사실과 차이가 날 수 있음을 양해 구합니다. 공부용 목적으로 포스팅 하였습니다.
* 저작권의 문제 발생시 바로 삭제, 비공개하겠습니다. 지적 부탁드립니다.
목표 : 컴파일의 뜻과 단계, 각 중요단어를 이해한다.
목차 : 1. 컴파일이란?
2. 컴파일의 단계
3. 중요단어
1. 컴파일(compile) 이란?
고급언어로 쓰여진 프로그램을 그와 의미적으로 동등하며 컴퓨터에서 즉시 실행될 수 있는 형태의 목적 프로그램으로 바꾸어 주는 번역 프로그램.
고급언어로 쓰여진 프로그램이 컴퓨터에서 수행되기 위해서는 컴퓨터가 직접 이해할 수 있는 언어로 바꾸어 주어야 한다. 이러한 일을 하는 프로그램을 컴파일러라고 한다. 예를 들어 원시언어가 파스칼(Pascal)이나 코볼(Cobol)과 같은 고급언어이고 목적언어가 어셈블리 언어나 기계어일 경우, 이를 번역해 주는 프로그램을 컴파일러라 한다.
컴파일을 하기 위하여 입력되는 프로그램을 원시 프로그램이라 하고 이 프로그램을 기술한 언어를 원시언어(source language)라 한다. 또 번역되어 출력되는 프로그램을 목적 프로그램이라 하고 이 프로그램을 기술한 언어를 목적언어(object language 또는 target language)라 한다. 한 프로그램을 컴파일하여 목적 프로그램으로 바꾸어 놓으면, 원시 프로그램을 수정하지 않는 한 계속 반복해서 수행할 수 있다.
크로스 컴파일러(cross-compiler)라는 것은 원시 프로그램을 컴파일러가 수행되고 있는 컴퓨터의 기계어로 번역하는 것이 아니라, 다른 기종에 맞는 기계어로 번역하는 컴파일러를 말한다. 이 밖에 다른 번역기를 살펴보면 어셈블러(assembler), 인터프리터(interpreter), 그리고 프리프로세서(preprocessor) 등을 들 수 있다.
어셈블러는 어셈블리 언어로 쓰여진 프로그램을 입력으로 받아 기계어 프로그램으로 바꾸어 주는 번역기이며, 어떤 번역기는 원시언어를 특수한 형태의 중간언어로 변환하는데 인터프리터는 이러한 중간언어를 입력으로 받아 목적언어로 변환하지 않고 직접 수행하는 프로그램이다.
고급언어로 쓰여진 프로그램의 의미를 수행하는데 있어서 컴파일러는 그와 동등한 의미를 갖는 목적 프로그램으로 바꾸어 목적 프로그램을 수행함으로써 결과를 얻고, 인터프리터는 원시 프로그램의 의미를 직접 수행하여 결과를 얻는다. 원시 프로그램의 수정 없이 계속 반복 수행하는 응용 시스템에서는 컴파일러가 효율적이며, 개발 시스템이나 교육용 시스템에서는 인터프리터가 더 능률적이다.
출처 : 네이버 지식사전
=================================================================
2. 컴파일의 단계
프로그램을 작성하는 과정은 (C언어 기준)
첫 번째 : 프로그램을 작성한다.
두 번째 : 컴파일이라는 과정을 거친다.
세 번째 : 링크라는 과정을 거친다.
네 번째 : 실행 파일이 생성된다.
로 나눌 수 있다. 이 중 자신이 구현하고자 하는 것을 C언어를 이용하여 논리적으로 작성하게 되는데 이렇게 해서 작성된 것을 소스-코드(source-code) 라고 하고 그 파일을 소스-파일 이라고 한다. 더불어 이렇게 프로그램을 작성하는 과정을 흔히 코딩(cording)이라 한다.
컴파일과 프로그래밍 과정은 다음과 같다.
처음의 소스 파일은 우리가 작성하는 ".c"파일이다 실행파일을 만들기 위해 가장 먼저 실행되는 것은 전처리기(Preprocessor)이다. 전처리기를 통해서 ".i"파일이 생성되고, 컴파일러에서 하드웨어 종속적인 어셈블리코드(".asm")를 생성하게 된다. 이후 어셈블러(Assembler)에 의하여 어셈블리어가 오브젝트 파일을 생성하고, 이 오브젝트 파일들이 링킹(Linking)과 재배치(Relocation)과정을 거쳐 실행 파일이 생성된다.
=================================================================
3. 중요단어
★ 전처리(preprocess)
컴파일러는 사용자가 작성한 코드를 컴파일하기에 앞서 전처리문에서 정의해 놓은 문장들을 먼저 처리한다.
종류로는 #include, #define, #if, #error, #line, #pragma 등이 있다.
이것은 방대한 소스 코드를 지우지 않고 활성화와 비활성화하는 데에 가장 많이 이용된다.
즉, 기존에 있는 소스 코드를 건드리지 않고 부분적인 컴파일을 하는 것이다.
어떤 C 컴파일러는 전처리문의 첫 문자 #이 항상 그 라인의 첫 문자이어야 한다.
★ i파일
전처리 과정이 끝난 후 생성되는 파일이다.
★ asm 파일
기계가 이해할 수 있는 어셈블리 코드가 생성된 파일이 .asm 이다.
★ obj 파일
.asm 파일이 어셈블러(Assembler)에 의하여 오브젝트 파일 내에 저장되게 된다. 오브젝트 파일은 .obj라는 확장자를 가지고 있다.
★ 어셈블 컴파일
어셈블러(assembler)는 어셈블리어를 기계어 형태의 오브젝트 코드로 해석해 주는 컴퓨터 프로그램을 말한다.
이것은 어셈블리 명령 부호를 오피코드로 해석할 뿐만 아니라 메모리의 위치들을 이름으로 표시하는 기능, 매크로를 통한 문장 치환 기능 등을 함께 제공한다. 높은 수준의 어셈블러는 고급 제어 구조, 높은 수준의 프로시져/함수 선언 및 호출, 높은 수준의 자료형 추상화 같은 높은 수준의 언어 추상화 기능을 제공하기도 한다.
★ 링커(Linker)
링커의 역활은 생성된 오브젝트 파일과 라이버러리 함수를 연결해 하나의 실행파일을 만드는것이다 이것을 링킹이라 한다
'공부' 카테고리의 다른 글
0929) 공부 / (펌) 실수를 2진수로 표현 (0) | 2010.09.29 |
---|---|
0923) C 보충 (0) | 2010.09.23 |
0920) 환경변수 등록 (0) | 2010.09.20 |
0917) 유닉스 계보 (0) | 2010.09.17 |
0916) 20100916 (0) | 2010.09.16 |