전공/리눅스

리눅스 프로그래밍 개발 환경

vss121 2023. 1. 9. 11:21

GCC(컴파일러) + VIM(에디터)

 

GCC(GNU Compiler Collection)

- 그냥 score이라고만 하면 명령어로 생각함. 실행할 때는 ./score로 해야함

 

[gcc 컴파일]

1) gcc 파일명(*.c) : Default로 out 파일이 생성된다.  a.out

out 파일도 실행시킬 수 있음

2) gcc -c 파일명(*.c) : 오브젝트 파일을 생성한다.

3) gcc -c 오브젝트_파일명(*.o) 파일명(*.c)

   gcc -o 실행파일명(*.out) 오브젝트_파일명(*.o)

4) gcc -o 실행파일 파일명(*.c) : 실행 파일을 만든다. (3번을 한줄로...) 소문자 '오'(output)

 

[gcc 옵션]

1. -W -Wall 옵션 : 아주 사소한 모호성에 대해서도 경고가 발생

2. -O2 옵션 : 최적화 레벨 2로 설정. (대부분의 최적화를 시도) 대문자 '오'

 

 

 

GCC Compilation Process

  •  preprocessing(전처리기가) : 매크로를 확장시킴

Source File(source.c) -> Preprocessed File(.i file)

gcc -E source.c //파일생성은x

gcc -E source.c -o source.i //파일생성

  • compilation(컴파일러가) : 소스코드 -> 어셈블리코드

Preprocessed File(.i file) -> Assembly code(.s file)

gcc -S source.c

  • assembly(어셈블러가) : 어셈블리코드 -> 머신코드(=바이너리코드)(기계명령, 오브젝트파일, 실행파일 x)

Assembly code(.s file) -> Object code(.o file)

gcc -c source.c

hexdump swap2.o  // 16진수로, 

objdump -D swap2.o // disassemble, 기계어->어셈블리언어

 

  • linking(링커가) : 실행 가능한 포맷으로

Object code(.o file) -> Executable file(.exe)

gcc source.o -o source

./source

 

5. -E 옵션 : 전처리 과정의 결과를 화면에 보이는 옵션 

             (전처리과정 중 발생한 오류를 검증)

6. -S 옵션 : cc1으로 전처리된 파일을 어셈블리 파일로 

             컴파일까지만 수행하고 멈춘다. (*.s)

 

7. -c 옵션 : as에 의한 어셈블까지만 수행하고 링크는 수행하지 않는다.

8. -v 옵션 : gcc가 컴파일을 어떤 식으로 수행하는지를 화면에 출력한다.

 

 

파일 분리

myswap.c

swap.c

swap.h

gcc myswap.c swap.c -o myswap

 

매크로

gcc insa.c -o insa -DKOREAN

-D[매크로] 옵션 : 매크로를 외부에서 define 할 때 사용한다.

#ifdef KOREAN (=KOREAN이 정의되어 있다면) ~ #else ~ #endif

 


--help : 간단한 옵션을 출력해줍니다.
--version : gcc의 버젼을 출력해 줍니다.
 
-o : 출력 파일명을 지정할 때 사용합니다.
-c : 링킹 과정을 진행 하지 않고 .o 파일인 오브젝트 파일까지만 생성 하게 됩니다.
-S : 어셈블러까지 진행 하지 않고, 컴파일러까지의 출력은 .S 어셈블러 파일을 생성하게 됩니다.
-O1 ~ -O3 : 최적화 수준을 지정합니다. 숫자가 클수록 높은 수준의 최적화를 하게 됩니다.
-g : 디버깅을 위한 정보를 컴파일 하면서 생성하게 됩니다.
-D : define 을 할수 있는 옵션입니다.

 

-l (엘) : 라이브러리 이름을 지정합니다.
 -L : 추가 라이브러리 디렉토리를 지정합니다.
-W : 모든 에러 메시지 출력
-w : 모든 에러 메시지를 출력 하지 않음
-I(아이) : 추가 헤더 파일이 있는 디렉토리를 지정합니다.
 
 

'전공 > 리눅스' 카테고리의 다른 글

리눅스 명령어  (0) 2023.01.11
리눅스 파일 속성  (0) 2023.01.10
리눅스 개요  (0) 2023.01.09
CentOS + Linux Services  (0) 2023.01.06
리눅스 쉘  (0) 2022.12.27