일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 우분투
- 파이썬
- programmers
- 깃
- db
- DevOps
- ubuntu
- git
- 자바
- Linux
- 알고리즘
- mysql
- github
- 머신러닝
- Ai
- 프로그래머스
- 정처기
- 코테
- 데이터베이스
- 자료구조
- Kubernetes
- 리눅스
- docker
- LV 0
- Lv 2
- 쿠버네티스
- 인공지능
- 코딩테스트
- Python
- Java
Archives
- Today
- Total
Myo-Kyeong Tech Blog
[ 리눅스 ] C언어 GCC 컴파일 과정( Ubuntu 20.04 ) - Preprocessing, Compilation, Assembly, Link 본문
리눅스
[ 리눅스 ] C언어 GCC 컴파일 과정( Ubuntu 20.04 ) - Preprocessing, Compilation, Assembly, Link
myo-kyeong 2023. 5. 23. 20:47728x90
반응형
C언어 컴파일 과정은 크게 전처리(Preprocessing), 컴파일(Compilation), 어셈블(Assembly), 링크(Link) 4단계로 나눌 수 있습니다.
[ helloworld.c 파일 생성 ]
nano helloworld.c
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
전처리 ( Preprocessing )
- #define, #include 와 같은 전처리 지시어를 처리
- #include <stdio.h> : 컴파일러에게 stdio.h라는 헤더 파일의 내용을 현재 위치에 삽입하도록 지시
- 'helloworld.i' 파일 생성
gcc -E helloworld.c -o helloworld.i
컴파일 ( Compilation )
- 전처리된 소스 코드를 받아 어셈블리 코드로 변환
- 코드의 문법 오류를 체크하고 이상이 있다면 오류 메시지 출력하고 컴파일 중지
- 'helloworld.i' 파일이 컴파일되어 'helloworld.s' 파일 생성
gcc -S helloworld.i -o helloworld.s
[ helloworld.s 어셈블리 코드 ]
어셈블 ( Assembly )
- 어셈블리 코드가 기계어 코드로 변환
- 'helloworld.o' 오브젝트 파일 생성
gcc -c helloworld.s -o helloworld.o
링크 ( Linking )
- 오브젝트 파일과 라이브러리를 링크하여 실행 가능한 파일 생성
- 'helloworld.o' 오브젝트 파일 링크되어 'helloworld' 실행 파일 생성
gcc helloworld.o -o helloworld
./helloworld
728x90
반응형
'리눅스' 카테고리의 다른 글
[리눅스] Mac (M1|M2|M3) 에 VirtualBox 설치하는 방법 (1) | 2024.07.22 |
---|---|
[리눅스] Docker 설치하기 ( Ubuntu 22.04 ) (0) | 2023.12.02 |
[리눅스] Ubuntu 22.04 개발 환경 커스터마이징 - vimrc, bashrc 파일 (0) | 2023.05.07 |
[리눅스] Shell Script을 이용한 패키지 설치 자동화 (0) | 2023.05.05 |
[리눅스] Ubuntu 22.04 설치 및 PuTTY로 원격 접속하는 방법 (0) | 2023.05.05 |