본문 바로가기
운영체제/리눅스

[리눅스] GCC 입문

by Cloud_Park 2022. 7. 11.

해당 글은 패.캠에서 인강들어 정리한 내용입니다.

VM을 사용을 권장드리며 aws, nhn cloud 사용가이드 전달드립니다.

2022.07.13 - [클라우드/NHN Cloud] - [NHN Cloud] 인스턴스 생성하기

2018.11.16 - [클라우드/AWS] - (AWS) EC2 인스턴스 생성

 

 

 

GUN Compiler Collection

C,C++ ,Objectivc-C,Fortranm,Adam,Go

 

설치 도구 (yum)

redhat 계열에서 패키지 관리 프로그램인 RPM 기반의 시스템을 위한 자동 업테이터 겸 패키지 관리/삭제 도구

페도라 centOS 등 많은 RPM 기반 리눅스 베포판에서 사용

 

기본 사용법

설치 : yum install

삭제 : yum remove

업그레이드  : yum update

조회  : yum search

목록 : yum list

8버전은 :  설치도구 dnf

 

 

GCC 설치 

 

yum install gcc
yum install gcc-c++ // gcc++ 컴파일러일 경우


예제파일 
hello.c
-----
#include <stdio.h>
int main()
{
print("hello world");
return 0;
}
-----

##gcc사용
gcc hello.c -o hello
./hello

 

 

gcc comfile 과정

  1. prepercesser (cpp)
  2. compiler (gcc , g++)
  3. assembler (as)
  4. linker(ld)

 

hello.c - 전처리기:헤터,메크로 처리

cpp hello.c > hello.i

 

hello.i - 어셈블리 파일 /어셈블러: 어셈블리 코드를 기계어로

 gcc -S hello.i

 

hello.s - 오프젝트 파일 /링커:라이브러리 링킹

as -o hello hello.s

hello - 명령어파일

ld -o hell hello.o

전체 과정확인

gcc -v -save-temp -o hello hello.c

gcc 주요옵션

-o : 실행파일 이름 저장

-Wall : 모든 경고 활성화 // gcc -Wall hello.c -o hello

-E : 전처리기 과정 결과 생성 // gcc -E hello.c> hello.i

-S : 어셈블리 코드 생성 // gcc -S hello.c > hello.s

-C : 컴파일 코드 생성 (링킹 없음 ) // gcc -C hello.c

-save-temps: 모든 컴파일 중간파일 생성 // gcc -save-temps hello.c

-l : 공유 라이브러리 링크

-funsigned-char : char를 unsigned char로 취급 // gcc -Wall -funsigned-char main.c -o main

-fsigned-char : char 변수를 signed로 취급

-D : 컴파일 시점 사용자 지정 메크로 // gcc -Wall -DMY_MACRO main.c -o main

-Werror : 경로 에러로 변환 ,gcc 컴파일 경고가 에러로 표현됨

-I : 전처리 과정에서 헤더 파일을 탐색하는 기본 디렉토리를 추가

-U : -D와 반대로 소스코드내 #undef[Macro] 옵션을 추가 동일

최적화 옵션: 실행파일의 크기를 줄여 실행속도 향상

-O0: 최적화 수행 않함

-O1: -O0 보다 조금 낫다

-O2:가장 많이 사용, 일반 응용 프로그램이나 커널 컴파일할 경우

-O3: 가장 높은 레벨의 최적화, 모든 함수를 인라인 함수~

-O5: 사이즈 최적화 실행, 임베디드 시스템등 자원이 협소한 경우 사용

디버깅 옵션

-g : gdb 제공 정보를 바이너리에 삽입