프로그래밍 지식/C++

C 문법/ 소스파일부터 실행파일까지, From source To exe

게임이 더 좋아 2021. 11. 30. 19:35
반응형
728x170

 

우리가 쓴 코드가 어떻게 실행되는 것일까?

 

컴파일러의 역할은 무엇일까?

 

중간 중간 산출물은 도대체 뭘 위해 필요한 것일까?

알아보자


 

소스파일, Source File (원시 코드라고도 한다)

-> 프로그래밍 언어로 작성된 문서 (Text Editor로 쓰인 모든 문서)

-파일형식( filename.c 또는 .cpp)

 

Source File은 우리가 이해하기 쉬운 언어(프로그래밍 언어)로 쓴 것으로 

Compiler를 이용해 어셈블리어라는 기계어 전 단계의 언어로 바꾼다.

 

** 누구는 컴파일러 자체가 기계어로 바꾼다하는데(사실이 아니다)

그렇게 Interface가 적어지면 범용성이 떨어진다.

중간에 Assembly 라는 Interface를 달아서 이식성과 범용성을 높인다.

++그러나 대부분의 컴파일러가 어셈블러를 겸하고 있어서 그런 말을 하는 것이다.

 

실제로 컴파일러 작동 후

어셈블리어를 다시 어셈블러가 Machinary Code로 바꾸어서 작동하게끔 한다.

**일반적으로 기계어와 1:1 대응이기 때문에 어셈블러에는 인스트럭션 테이블만 내장해 두고 치환만 일어난다.

 

이렇게 최종적으로 기계어로 바꾼 파일을 object code (목적 코드)이라고 한다.

이 파일은 (.obj) 확장자를 가지고 있다.

** 이 obj 파일이 Linker가 Linking 하는 대상이 되는 것이다.

 

 

하지만 기계어로 바꾼 것이 바로 컴퓨터에서 실행이 될까??

프로그램은 OS가 관리해서 실행시키는 것이기 OS가 인식할 수 있게 바꿔줘야 한다.

그것이 바로 링커, Linker이다.

 

Linker는 .obj 파일을 exe파일로 바꿔주어 실행될 수 있게 만든다.

Linking 과정에서는 obj 코드 외에도 부가적인 코드를 같이 링크시킨다.

예를 들어 C++의 라이브러리와 프로그램을 만드는 데 필요한 Start-up 코드를 함께 링크한다.

 

 

 

 


 

모든 내용을 요약하면

 

소스코드 ->

컴파일러를 이용 ->

obj 파일로 변함 ->

Linker를 이용하여 여러가지 코드를 Linking함->

exe 파일이 바로 실행코드(executable code)

 

 

728x90
반응형
그리드형