정글

gcc 컴파일 하는 법

nkdev 2025. 5. 6. 21:14

내가 아직 gcc로 컴파일 하는 방법을 모른다고...?

https://velog.io/@dhwltnoooh/gcc-%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC

 

gcc 컴파일

프로그래밍 언어 = 고급언어(high-level language)       e.g. JAVA, C, Python, etc.컴퓨터 언어 = 기계 언어(machin language)       e.g. 0, 1 개발자가 작성한 프로그래밍 언어를 컴퓨터가 해석 할 수 있도

velog.io

이 블로그를 참고하여 컴파일 과정을 정리해봤다.

gcc 옵션

-o : 출력 파일명 지정

-c : 링킹 과정을 진행하지 않고 오브젝트 파일(.o) 까지만 생성 (compile only)

-S : 어셈블리까지 진행하지 않고 컴파일러까지의 출력은 .S 어셈블러 파일 생성

-O1 ~ -O3 : 최적화 수준 지정. 숫자가 클 수록 높은 수준의 최적화 수행

-g : 디버깅을 위한 정보를 컴파일 하면서 생성

-D : define할 수 있는 옵션

-l : 라이브러리 이름 지정

-L : 추가 라이브러리 디렉토리 지정

-W : 모든 에러 메시지 출력

-w : 모든 에러 메시지를 출력하지 않음

-I : 추가 헤더 파일이 있는 디렉토리 지정

 

예제 1

//hello.c
#include <stdio.h>

int main() {
    printf("Hello GCC\n");
    return 0;
}
$ gcc hello.c //컴파일 수행 후 링킹 과정을 거쳐 a.out 생성
$ ./a.out //a.out 실행
$ gcc -o hello hello.c //실행 파일의 이름을 hello로 지정
$ ./hello //hello를 실행
$ gcc -c -o hello.o hello.c //오브젝트 파일 생성
$ ls //hello.o 가 생성됨
$ gcc -o hello hello.o //오브젝트 파일을 이용해 컴파일
$ ./hello //hello 파일을 실행

 

예제 2

//add.h
int Add(int a, int b);

//add.c
#include <stdio.h>
#include "add.h"

int Add(int a, int b){
	return a+b;
}

//main.c;
#include <stdio.h>
#include "add.h"

int main(){
	printf("%d\n", Add(3, 4));
    return 0;
}
$ gcc -c add.c //컴파일 수행 후, 목적 파일(add.o) 생성
$ gcc -o add -c add.o add.c //목적 파일을 포함한 컴파일 수행
$ ./add //add 파일 실행
$ gcc -o add add.c main.c //여러 개의 소스파일을 열거하여 컴파일
$ ./add //add 파일 실행
$ gcc -o add -c add.c main.c -I [header directory path] //옵션 I로 헤더파일이 위치한 디렉토리를 지정
$ ./add //add 파일 실행

 

gdb(GNU Debugger)

프로세스 디버깅 도구로 gdb를 쓸 수 있다.

GDB, the GNU Project debugger, allows you to see what is going on 'inside' another program while it executes -- or what another program was doing at the moment it crashed. 

 

GNU 소프트웨어 시스템을 위한 기본 디버거로, 프로그램 수행 중에 그 내부에서 무슨 일이 일어나고 있는지 혹은 프로그램이 잘못 실행되었을 때 무슨 일이 일어나고 있는지 보여주는 것이다.

  • 프로그램을 시작하고, 그 동작에 영향을 미치는 모든 요소들을 특정한다.
  • 특정 상황에서 프로그램을 정지시킨다.
  • 프로그램이 정지되었을 때 어떤 일이 발생했는지 검사한다.
  • 프로그램의 내용을 변경하여 어떤 버그가 있었는지 확인하고 정정하기를 반복한다.

gdb는 지금 쓸 일이 없다. 다음에 더 자세히 다뤄봐야지 ~

 

https://www.sourceware.org/gdb/

'정글' 카테고리의 다른 글

에코 서버(2) - 소켓 인터페이스를 위한 도움함수들  (4) 2025.05.07
에코 서버 실행하기  (4) 2025.05.06
OSI 7 Layers/TCP/UDP/HTTP  (4) 2025.05.06
에코 서버(1) - 호스트와 서비스 변환  (0) 2025.05.05
CGI  (0) 2025.05.05