gcc(GNU Compiler Collection)를 사용하여 C/C++ 소스 코드를 컴파일하는 과정

2025. 1. 5. 21:35Linux*security

반응형

 

1. 전처리기 (Preprocessor)

  • 역할: 전처리기는 소스 코드에서 #include, #define, #ifdef 등의 전처리 지시자를 처리한다.
  • 처리 과정:
    • 헤더 파일 포함: #include 지시자를 통해 필요한 헤더 파일을 코드에 삽입한다.
    • 매크로 확장: #define으로 정의된 매크로를 실제 값으로 대체한다.
  • 출력 파일: 이 과정 후의 출력 파일은 .i(C 소스의 경우)나 .ii(C++ 소스의 경우) 파일이다.
gcc -E source.c  # 전처리 과정만 수행

2. 컴파일러 (Compiler)

  • 역할: 컴파일러는 전처리된 코드(.i 파일)를 받아서 어셈블리 언어로 변환한다.
  • 처리 과정: 인간이 이해할 수 있는 고급 언어(C/C++)를 기계가 이해할 수 있는 저급 언어인 어셈블리어로 변환한다.
  • 출력 파일: 컴파일러는 어셈블리 코드 파일(.s)을 생성한다.
gcc -S source.i  # 컴파일 과정만 수행

3. 어셈블러 (Assembler)

  • 역할: 어셈블러는 어셈블리어 코드(.s)를 읽어 기계어 코드로 변환한다. 기계어는 컴퓨터가 직접 실행할 수 있는 코드이다.
  • 처리 과정: 어셈블리 코드에서 명령어를 변환하여 오브젝트 파일(.o, .obj)을 생성한다.
  • 출력 파일: .o(또는 .obj) 파일이 생성된다. 이는 기계어로 변환된 코드이다.
gcc -c source.s  # 어셈블리어를 오브젝트 파일로 변환

4. 링커 (Linker)

  • 역할: 링커는 여러 개의 오브젝트 파일(.o)과 라이브러리 파일을 결합하여 실행 가능한 파일을 생성한다. 링커는 프로그램의 외부 참조를 해결하고 필요한 라이브러리 파일을 포함시킨다.
  • 처리 과정: 링커는 여러 목적 파일을 결합하고, 필요한 경우 외부 라이브러리를 링크하여 최종 실행 가능한 프로그램을 만든다.
  • 출력 파일: 실행 가능한 파일(.exe 또는 다른 형식의 바이너리 파일)을 생성한다.
gcc -o executable source.o  # 실행 파일 생성

컴파일 전체 흐름:

Source Code (.c, .cpp) -> Preprocessing (cpp) -> Preprocessed Code (.i, .ii) 
-> Compilation (gcc) -> Assembly Code (.s) -> Assembling (as) -> Machine Code (.o, .obj) 
-> Linking (ld) -> Executable Machine Code (.exe)

컴파일 예시:

gcc source.c -o output  # 전체 과정 실행, 출력은 'output' 실행 파일

 

 

 

 

  • 전처리기 (Preprocessor): #include, #define 등을 처리하여 전처리된 파일을 생성.
  • 컴파일러 (Compiler): C/C++ 코드를 어셈블리어로 변환.
  • 어셈블러 (Assembler): 어셈블리어 코드를 기계어로 변환하여 오브젝트 파일 생성.
  • 링커 (Linker): 오브젝트 파일들을 결합하고 라이브러리를 링크하여 실행 파일을 생성.

 

 
 

 

 

반응형

'Linux*security' 카테고리의 다른 글

네트워크 설정  (0) 2025.01.30
ifconfig 명령어  (0) 2025.01.30
한국 미러 서버를 통해 패키지를 다운로드 | notepadqq  (2) 2024.09.18
UFW(Uncomplicated Firewall)  (1) 2024.09.18
프로세스 생성과 관리  (1) 2024.09.17