Notice
Recent Posts
Recent Comments
LuvSea
Linux gcc compile의 흐름 본문
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
hello.c라는 파일이 있다고 가정하자.
기본적으로 gcc에서 또는 VC에서는 다음의 과정을 거치게 된다.
먼저 전처리 과정의 산물이 "hello.i"파일을 살펴보자.
전처리 과정에서 무엇인지 알지 못할 많은 코드들이 찍혀있다.
마지막에는 코드의 내용을 담고 있는데 vi명령모드에서 G 를 살포시 눌러준다음 문서의 맨 마지막으로 가면 hello한줄 print할려고 900줄이 넘는 전처리 코드가 생성된 것을 확인 할 수가있다.
다음으로 목적파일인 "hello.s"파일을 살펴보자.
그림을 보면 많이 보아왔던 어셈블리코드를 확인 할 수있다.
여기서 중요한것은 위의 전처리코드나 어셈블리코드가 gcc와 vc는 틀리다는것이다.
이유를 간단히 말하자면 GNU C 컴파일러인 gcc와 VC의 C컴파일러인 cl은 C표준에 따라 결과는 같은 결과를 생성하지만 그 중간과정은 표준이 아니기 때문에 각각의 특성에 따라 소스가 다르게 생성되는것이다.
자~ 이제 한번씩 다 해보시길 바래요~ ㅎㅎ
기본적으로 gcc에서 또는 VC에서는 다음의 과정을 거치게 된다.
위의 c파일에서 전처리기(Preprocessor)를 통해 전처리 과정을 거치게 되고, 그 결과 "hello.i"파일이 생성된다. 그리고 컴파일러(Compiler)에서 하드웨어에 종속적인 어셈블리코드인 "hello.s"를 생성하게된다.(VC에서는 ".asm") 그 이후 어셈블러(Assembler)에 의해 어셈블코드는 목적파일인 오브젝트파일 "hello.o"를 생성(VC에서는 "hello.obj")하고, 이 오브젝트 파일은 링킹(Linking)과 재배치(Relocation)과정을 거쳐 실행파일인 hello파일(VC에서 "hello.exe")이 생성된다.
이러한 중간 과정에서 생성되는 파일은 일반적으로 보여지지 않지만
gcc의 옵션을 다음과 같이 주고 실행하게 되면 확인 할 수 있다.
이러한 중간 과정에서 생성되는 파일은 일반적으로 보여지지 않지만
gcc의 옵션을 다음과 같이 주고 실행하게 되면 확인 할 수 있다.
gcc --save-temp -o hello hello.c
먼저 전처리 과정의 산물이 "hello.i"파일을 살펴보자.
전처리 과정에서 무엇인지 알지 못할 많은 코드들이 찍혀있다.
마지막에는 코드의 내용을 담고 있는데 vi명령모드에서 G 를 살포시 눌러준다음 문서의 맨 마지막으로 가면 hello한줄 print할려고 900줄이 넘는 전처리 코드가 생성된 것을 확인 할 수가있다.
다음으로 목적파일인 "hello.s"파일을 살펴보자.
그림을 보면 많이 보아왔던 어셈블리코드를 확인 할 수있다.
여기서 중요한것은 위의 전처리코드나 어셈블리코드가 gcc와 vc는 틀리다는것이다.
이유를 간단히 말하자면 GNU C 컴파일러인 gcc와 VC의 C컴파일러인 cl은 C표준에 따라 결과는 같은 결과를 생성하지만 그 중간과정은 표준이 아니기 때문에 각각의 특성에 따라 소스가 다르게 생성되는것이다.
자~ 이제 한번씩 다 해보시길 바래요~ ㅎㅎ
'sTudy' 카테고리의 다른 글
Visual Studio 2008 ws2_32.lib(윈속) 설정 (0) | 2009.04.20 |
---|---|
IEEE754 표준에의한 부동소수점의 이진표현 (1) | 2009.04.17 |
Intel PXA255 Pro3 Board를 이용한 SSH server & client program porting (1) | 2008.12.11 |
Intel PXA255-PRO3 Board를 이용한 Root File System Porting (2) | 2008.12.06 |
[참고자료] JFFS 와 YAFFS 파일 시스템 (0) | 2008.12.06 |
Comments