[리눅스] GCC 입문
해당 글은 패.캠에서 인강들어 정리한 내용입니다.
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 과정
- prepercesser (cpp)
- compiler (gcc , g++)
- assembler (as)
- 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 제공 정보를 바이너리에 삽입