이 글은 gcc라는 소프트웨어를 통해서 C/C++ 소스 코드 파일을 직접 실행했을 때의 중간 과정들을 기록하기 위한 목적으로 작성되었습니다. 일반적으로 visual studio 의 MSVC 컴파일러를 통해서 c 소스 코드를 작성하는 방법도 있습니다만, 비주얼 스튜디오의 제일 주된 목적은 윈도우에서 실행 가능한 C++ MFC, C# 클라이언트 프로그램(워드, 엑셀, ppt ...etc) 을 작성하는 것이고 거기에 최적화되어있습니다.
0. 소스 코드 작성(.c 파일)
당연한 얘기겠습니다. c파일이 있어야 전처리를 하든 컴파일을 하든 할 수 있을테니까요.
~$ vi example.c
이러한 vi 명령어를 통해 c언어 파일을 작성합니다.
1. 전처리(.c 파일 => .i 파일)
~$ gcc -E -o one.i one.c
이제 c언어 소스 코드 파일이 있으면, 먼저 /**/, // 와 같은 주석을 제거하고 #include <> 등에 wrapped되어있는 헤더의 내용들을 unwrap하는 과정이 필요합니다. 이 과정에서 .i 파일은 .c 파일보다 내용이 더 많아집니다.
2. 컴파일(.i 파일 => .s 파일)
~$ gcc -S -o one.s one.c
이제 컴파일 과정을 통해서 .i 파일에서 0과 1인 기계어와 1대1 직접 호환되는 어셈블리 코드가 생깁니다.
3. 어셈블러(.s 파일 => .o 파일)
~$ gcc -c -o one.o one.c
이러한 어셈블리 코드도 결국 컴퓨터가 직접 이해할 수 있는 0과 1로 이뤄진 코드로 변환되어야 합니다. .o 파일은 이러한 형식으로 가공이 됩니다.
4. 링커(.o 파일 => 실행 파일)
~$ gcc -o one one.c
링커는 일반적으로 단어 그대로, 여러 요소들을 연결하는 과정입니다. 원래는 리눅스에서 아래와 같이, 여러 c언어 소스 코드들을 묶어주는 역할을 한다. 이 과정에서 직접 실행할 수 있는 묶여진 파일이 생성이 된다.
'lesson > Operating System' 카테고리의 다른 글
리눅스 쉘 $에서 #로 바꾸는 방법 (0) | 2024.11.10 |
---|---|
소스 코드의 정확한 사전적 의미는? (1) | 2024.10.09 |
프로세스와 프로그램과 프로세서의 차이 (0) | 2024.08.22 |
윈도우에서 Program Files에 (x86)가 있고 없고의 차이 (0) | 2024.08.01 |
32비트 프로세서가 메모리를 4GB까지 인식 가능한 이유 (0) | 2023.10.22 |
댓글