기타 강좌

        1- 1 [ 개발툴 ]

 

----------컴파일러---------


 

프로그램을 짠다는 것은 사용하는 언어의 문법에 맞게 명령들을 작성하는 것이다. 가령 1+2를 계산하여 결과를 출력하는 프로그램을 작성한다면 "1+2를 계산하라", "출력하라"라는 명령을 작성해서 파일로 저장해야 한다. 이렇게 언어의 문법에 맞게 명령들을 기술한 파일을 원시 파일(Source File)이라고 하며 원문 그대로 소스라고 부른다.

소스는 고급 언어로 작성되어 있기 때문에 컴퓨터가 바로 이해할 수 없으며 따라서 실행할 수도 없다. 컴퓨터는 오로지 이진수로 된 기계어밖에 알아듣지 못한다. 그래서 소스를 컴퓨터가 이해할 수 있는 기계어 코드로 번역해야 하는데 이 동작을 컴파일(Compile)이라고 한다. 컴파일이란 소스에 작성된 명령들을 컴퓨터 언어인 기계어로 번역하는 작업이며 컴파일을 하는 프로그램을 컴파일러(Compiler)라고 부른다.

컴파일러는 소스 파일에 작성된 고급 언어 명령을 해석하여 기계어 코드로 바꾸고 그 결과를 목적 파일(Object File)에 써 넣는다. 즉 컴파일러는 소스 파일을 목적 파일로 바꾸는 프로그램이다. 목적 파일은 소스의 명령들을 번역한 기계어 코드를 가진 파일이되 이 파일도 곧바로 실행할 수 없다. 왜냐하면 프로그램은 기계어 코드외에도 운영체제가 요구하는 코드를 추가로 가져야 하기 때문이다.

목적 파일을 실행 파일로 바꾸기 위해서는 이 실행 파일이 운영체제의 요건에 맞도록 형태를 조금 바꾸고 스타트업(StartUp)이라는 추가 코드를 가져야 한다. 목적 파일에 이런 처리를 하여 실행 파일로 만드는 동작을 링크(Link)라고 하며 링크를 해 주는 프로그램을 링커(Linker)라고 부른다. 하나의 프로그램이 작성되는 과정은 다음과 같이 그릴 수 있다.

소스 파일은 컴파일러에 의해 컴파일되어 목적 파일이 되며 목적 파일은 링커에 의해 링크되어 최종적으로 실행 가능한 실행 파일이 된다. 이렇게 컴파일과 링크를 통해 실행 파일을 만드는 과정을 빌드(Build)라고 한다. 소스 파일을 번역하여 곧바로 실행 파일을 만들지 않고 목적 파일이라는 중간 과정을 거치는 이유는 여러 개의 소스를 합쳐 하나의 실행 파일을 만들어낼 수 있어야 하기 때문이다. 하나의 소스에 필요한 모든 명령을 다 기술할 수 없으므로 소스를 여러 개 작성하고 이것을 모두 연결하면 완전한 실행 파일 하나가 나온다.

A.cpp를 컴파일하여 A.obj를 만들고 B.cpp, C.cpp는 각각 B.obj, C.obj를 만든다. 각 목적 파일은 소스 파일의 명령을 번역한 기계어 코드를 가지고 있을 것이다. 이렇게 개별 소스를 컴파일해서 만들어진 세 개의 목적 파일을 연결하면 하나의 실행 파일이 되며 링크 단계에서 이미 만들어진 라이브러리도 결합된다. 이런 식으로 소스를 여러 개 작성해서 최종적으로 링크하는 방식을 분할 컴파일이라고 하는데 여러 사람이 같이 작업하거나 기능별로 모듈을 개발할 때 일반적으로 사용하는 방법이다.

목적 파일은 개발 언어에 독립적인 형식을 가지고 있기 때문에 한 프로그램을 작성하는 데 여러 개의 언어를 같이 사용할 수 있다. 예를 들어 위 그림에서 A.cpp는 C로 작성하고 B.cpp는 파스칼로, C.cpp는 베이직으로 작성했다고 하자. 이때 각 언어의 컴파일러는 자신의 소스를 해석하여 목적 파일을 만들 것이고 이렇게 만들어진 목적 파일은 링커에 의해 연결되어 하나의 완성된 실행 파일이 될 수 있는 것이다. 이런 식으로 여러 개의 언어를 같이 사용하는 방식을 혼합 프로그래밍이라고 하는데 가능은 하지만 번거로운 문제가 많기 때문에 그리 일반적이지는 않다.

하나의 실행 파일을 만들려면 편집기로 명령들을 기술하여 소스를 만들고 이 소스를 컴파일하여 목적 파일로 만든 후 다시 링크 과정을 거쳐야 한다. 불과 얼마전까지만 해도 프로그래머는 이 번거로운 과정을 거쳐야만 실행 파일을 만들 수 있었는데 여러 단계를 거쳐야 하기 때문에 무척 불편했다. 아직도 일부 리눅스, 유닉스 환경에서는 이 방법대로 개발한다.

최근의 개발툴들은 자체에 편집기, 컴파일러, 링커를 모두 내장하고 있기 때문에 한 번에 소스를 실행 파일로 바꿀 수 있다. 뿐만 아니라 디버거, 프로파일러, 리소스 편집기 등 개발에 필요한 편의 기능까지 같이 제공하는데 이런 환경을 통합 개발 환경(IDE, Integrated Development Environment)이라고 부른다. 쉽게 말해서 종합 선물 세트쯤 된다. 개발 환경 내에서 편집, 개발, 디버깅, 최적화까지 다 할 수 있기 때문에 무척 편리하며 생산성 향상에 크게 기여하고 있다.

용어의 원래 뜻만으로 본다면 컴파일러란 소스 파일을 목적 파일로 변환하는 프로그램을 의미하는데 요즘은 통합 개발 환경이 워낙 일반화되었기 때문에 개발 환경 자체를 컴파일러라고 부른다. 문서 작업시에 워드 프로세서를 사용하고 계산을 할 때 스프레드 쉬트 프로그램을 쓰는 것처럼 개발 작업을 할 때는 주로 컴파일러를 사용한다.

Comment '4'
  • ?
    -Zennys- 2009.06.13 14:49
    제가 다시 처음부터 글을 천천히 올리기로 하였습니다.
  • ?
    괴도키드 2009.06.14 09:01

    혹시 이거 제가 메모장에 저장해서 제 엠피쓰리에 쳐 넣어도 되겠습니까?

    왠지 C언어가 공부하고싶어지는군요;;

  • ?
    제니스 2009.06.14 11:31

    마음대로 하세요 ^^

    저는 이글을 공부하라고 올린거니 마음껏

    가져다 공부하셔도되요 ^^

  • ?
    Last H 2009.06.14 19:30

    네, 말씀하신 것처럼 리눅스에선 Makefile이라고 해서 상당히 번거로우면서 까다로운 작업을 하죠.

    하지만 개발자가 주로 리눅스를 쓰게 되는 이유 중 하나인 공짜라는 점 때문에 컴팩트한 상품에 주로 들어가게 됩니다.

    그래서 디바이스 드라이버까지도 직접 하나하나 필요한것만 올릴 수 있도록 메이크를 이용하죠.

    (컴팩트한 제품 -mp3,pmp,휴대폰 등등 --용량이 크지 않기 때문에 최대한 아껴야 한다.--)


List of Articles
분류 제목 글쓴이 날짜 조회 수
Vegas Pro 베가스 강좌 목록 아방스 2017.09.28 886
파이널컷X 파컷 강좌 목록 아방스 2017.06.18 757
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [변수의 종류] 2 -Zennys- 2009.06.13 2767
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [변수의 정의] 2 -Zennys- 2009.06.13 2752
C언어 [ - Zennys -] 제니스의 C언어 강좌 [ 프로그램의 구조 ] -Zennys- 2009.06.13 1984
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [컴파일러] 4 -Zennys- 2009.06.13 1980
C언어 [ - Zennys -] C언어의 기초 ... 8 file - Zennys - 2009.06.08 1861
기타 3D MAX 2008 - subdivison 모델링 1 아방스 2009.05.28 1975
기타 그래픽 드라이버 삭제 및 재설치 방법 1 아방스 2009.05.28 3099
기타 클로버 자동업데이터기 사용법 4 file fgdr147 2009.05.21 2021
C언어 정체불명 입문자를 위한 요약노트 01 12 정체불명 2009.05.16 2010
C언어 정체불명 강의노트 개발툴의 설치 2 정체불명 2009.05.16 2246
기타 바이러스 제작 모험기 : 상편.shutdown명령어! 4 file 창조자 신 2009.05.16 3779
기타 인스톨 팩토리 사용법~ 5 file Skybound 2009.05.11 3772
기타 [VB6 강좌] 1~5강 강의평가 2 독도2005 2009.05.05 2256
C언어 락발라드 구구단~ file 정체불명 2009.05.02 2559
C언어 스릴 쇼크 서스펜스!!!!!!!! 정체불명 2009.05.01 1967
C언어 시작의반 6 file 정체불명 2009.05.01 2166
기타 게임제작 관련 학과들 7 아방스 2009.03.12 3061
기타 [VB6 강좌] 제5강 - 제어문 1 독도2005 2009.02.26 2661
기타 [VB6 강좌] 제4강 - 변수와 데이터형 1 독도2005 2009.02.25 2075
XpressEngine XE1.1.5로 업후 위젯들이 문제를 일으킬때 수정방법 아방스 2009.02.21 3033
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Next
/ 19