컴파일 과정에 대한 설명




프로그램 실행:  또는 [디버그] > [디버깅하지 않고 시작] 메뉴


게임으로 치면 개발이 아니고 완전 출시된 게임의 실행화면으로 보여달라.




프로그램 디버그:  키 또는 [디버그] > [디버깅 시작] 메뉴


비쥬얼스튜디오야 내가 한단계 한단계 감시하면서 실행하고 싶어.




코드 내가 컴퓨터에서 어떤 프로그램을 만들기 위해서 명령을 내린 모든것.


그 코드들이 컴파일을 해서 EXE파일 이 되는 과정이다. 컴파일 과정이란 EXE를 만드는 과정이다.


 컴파일과정은 다음과 같이 이루어진다.


전처리기 -> 컴파일러 -> 어셈블러 -> 링커.


1. 전처리기 단계


주석들을 삭제해준다.


내가 작성한 코드를 프로그램에 필요한 코드만 남겨두고 다 삭제하는 단계이다.




전처리기(preprocessor)는 프로그램을 컴파일할 때 컴파일 직전에 실행되는 별도의 프로그램이다. 전처리기가 실행되면 각 코드 파일에서 지시자(directives)를 찾는다. 지시자(directives)는 #으로 시작해서 줄 바꿈으로 끝나는 코드다.




전처리기는 컴파일러가 실행되기 직전에 단순히 텍스트를 조작하는 치환 역할을 하기도 하고, 디버깅에도 도움을 주며 헤더 파일의 중복 포함도 방지해주는 기능을 가진다.



 2.컴파일러


전처리기가 끝나면


컴파일러는 코드를 기계어로 번역해준다.


 c++이 고급언어다.


일반적인 기계어는 기계(cpu 하드디스크)에게 명령을 내릴수 있는 코드들을 의미하는데.


일반적인 사람들은 굉장히 이해하기 어려운 코드로 쳐져있다.


여러분들은 대부분 아래에서 4줄의 코드를 보겠지만


아무데나 일단 f9를 눌러서 중단점이라는 것을 만들고


그 상태에서 디버그 -> 디스어셈블리


라는 항목을 보면 기계어로 실제 어떻게 되어있는지 볼수 있다.




 3.  어셈블러


어셈블러 단계로 가게되면


그 상태에서 0101010101010101010101010101010로 바꾸게 된다.


그걸 obj로 만드는데 일반적으로 cpp라는 확장명 하나당


1개의 obj파일이 생기게 된다.




 4. 링커


링크작업이란 선언과 실제 코드의 내용들을 


어떤 코드가 실행되는 exe파일을 만들어주는 작업을 해준다. 


01010수준에서 연결해주는 작업이고.


pdb파일은 그 과정에서 잃어버린 이름을 기억해 놓는다.


ilk 파일과 pdb파일은 컴파일하면서 잃어버린 고급언어의 이름들을 기억해 놓는다.




정말 간략하게 설명하는 수준입니다. 만약 과제로 사용하신다면.. 사용 안하시는걸 추천드립니다.

+ Recent posts