별의 공부 블로그 🧑🏻‍💻
728x90
728x170

리눅스 c 컴파일

전처리 컴파일 링크 빌드 설명

전처리 단계 -> 컴파일 단계 -> 어셈블 단계 -> 링크 단계

(.c) (.i) (.s) (.o) (a.out)

.c 파일이 전처리 단계를 거쳐서. i 파일 (전처리된 c 파일) 이 생성되고

.i 파일이 컴파일 단계를 거쳐서. s 파일 (어셈블리어 파일) 이 생성되고

.s 파일이 어셈블 단계를 거쳐서. o 파일 (오브젝트 파일) 이 생성되고

.o 파일이 링크 단계를 거쳐서 a.out 파일 (실행파일) 이 생성되는 것이다.





전처리

위의 소스코드에서 #include로 시작하는 것을 전처리 기라고 부릅니다.

전처리 과정에서는 소스코드를 처리하기 쉽게 재구성하는 과정입니다.

위의 #include <stdio.h> 부분은 stdio.h 파일을 포함시키겠다는 의미인데 전처리 과정에서 저 파일에 있는 내용을 현재 소스파일에 붙이는 역할이라고 생각


컴파일(Compile)

complie : 번역하다, 편찬하다

컴파일은 소스코드를 컴퓨터가 읽고 처리할 수 있게 기계어로 변환하는 것을 말합니다.

위의 소스코드처럼 C나 Java와 같은 언어들은 인간이 알아볼 수 있게 작성해놓은 것이고 실제로 컴퓨터는 저런 소스를 읽을 수도조차 없습니다.

컴퓨터는 '0'과 '1' 밖에 모르기 때문이죠.

이 '0'과 '1' 밖에 모르는 컴퓨터가 소스코드를 처리하기 위해서는 컴퓨터가 알아들을 수 있는 언어로 번역시켜주어야 합니다.

이 작업을 컴파일이라 하고 컴파일러라는 프로그램이 해줍니다.



링크(Link)

링크는 실행 프로그램을 만들어주는 과정으로써 컴파일 과정에서 만들어진 오브젝트 파일(.obj) 들과 관련 오브젝트 파일들을 하나로 묶어주는 작업을 합니다.

링크 과정에서 실행파일(.exe)을 생성하게 됩니다.



빌드(Build)

빌드 = 컴파일 + 링크

빌드는 컴파일 작업과 링크 작업을 한 번에 해줍니다.



요약

1. 소스코드가 실행파일로 만들어지기까지의 과정

소스파일(.c) ▶ 컴파일(.obj) ▶ 링크(.exe)

2. 컴파일은 소스코드를 기계어로 바꾸어주는 과정

3. 링크는 실행에 필요한 오브젝트 파일이나 라이브러리 파일들을 묶어 최종 실행파일로 만들어줌

2. 빌드 = 컴파일 + 링크


c 컴파일

#> gcc

-E : 전처리만 하고 컴파일, 어셈블이나 링크는 하지 않는다.

-S : 컴파일만 하고 어셈블이나 링크는 하지 않는다.

-c : 링크를 실행하지 않고 컴파일과 어셈블만 수행한다. 이 옵션에서 링크와 관련된 -l과 -L 옵션을 무시한다.

-o : <file> : 지정한 <file>로 출력 파일을 만든다. 이 옵션을 사용하지 않으면 기본으로 a.out 실행 파일이 생성된다.

-g : 실행 파일을 생성할 때, 디버거를 위한 변수 테이블을 함께 생성한다. 이 옵션을 지정하지 않으면 디버깅할 수 없다.



전처리 과정

#> gcc -E test.c > test.i

오브젝트 파일 생성

#> #> gcc -c test.c

컴파일

#> gcc test.c

오류가 있다면 오류 문구가 뜸 없다면 생략하고 실행파일 생성 (옵션 넣어도 되고 안넣어두됌)

실행파일 생성

#> gcc test.c -o testexe


내용 출처 : https://blog.naver.com/appeal7712/221692986805

728x90
그리드형(광고전용)
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖