GNU
- 개발자라면?/Linux
- 2022. 9. 2.
GNU 오픈 개발도구 활용 기법
C 실행파일의 빌드 절차
* 빌드 에러가 발생하면 아래 과정들을 하나씩 확인해서 어떤 문제인지 확인하는데 사용할 수도 있다!!
- cpp (c preprocessing, c 전처리)
- #include 등 실제 c 문법이 아닌 부분을 바꿔줌
- 결과물: .i (전처)
- 중간확인 방법
- gcc -E <name>: 전처리까지만 진행하고 결과 출력
- gcc -E <name> > <output.i>: 전처리까지만 진행하고 <output.i> 에 저장
- cc1 (c compiler)
- C 코드를 assembly 코드로 바꿔줌
- 결과물: .s
- 중간확인 방법
- gcc -S <name>: 컴파일까지만 진행하고 .s 파일 생성 (전처리는 진행하나 결과는 저장하지 않음)
- as (assemble)
- binary를 object 파일을 만듦 (아직 실행할 수는 없음)
- Assembly language를 Machine language 로 바꿔줌
- 중간확인 방법
- gcc -c <name>: 어셈블까지만 진행하고 .o 파일 생성 (이전 과정은 진행하지만 결과는 저장하지 않음)
- ld (linking)
- object 파일을 실행파일로 만듦
- 라이브러리를 합하고 메모리를 매핑해주는 것
다른 gcc 옵션
- -v: 내부적인 과정을 출력
- -D: define 해줌
- -DNO: NO 정의
- -DDEBUG: printf 문 정의로 이해
- -Wall: 컴파일 중간의 Wanning 을 모두(all) 출력
- -l: 링커가 지정된 외부 라이브러리에서 링크하도록 지시
- gcc <name.c> -lpthread: 'pthread' 라이브러리를 포함해서 컴파일
(gcc 컴파일 스크립트에 디폴트로 pthread 라이브러리가 포함되지 않으면 에러 발생!)
- gcc <name.c> -lpthread: 'pthread' 라이브러리를 포함해서 컴파일
- -O# (optimization)
- 중요함!!
- # 에 따라 optimaze 해서 빌드 진행
- 결과물의 메모리, 속도 차이가 생김
Tips
- gdb (GNU Project Debuger)
- debugging 모드제공
- 참고
- #include ~
- <header.h>: 표준 directory 에 저장된 header.h 를 사용
- "./dir/header.": 표준이 아닌 다른 directory 에 저장된 header.h 를 사용
'개발자라면? > Linux' 카테고리의 다른 글
Make 빌드 시스템 2 (0) | 2022.09.02 |
---|---|
Make 빌드 시스템 1 (0) | 2022.09.02 |
라이브러리의 동작과 제작 (0) | 2022.09.02 |
쉘 & 쉘스크립트 (0) | 2022.09.01 |
리눅스 아키텍처와 명령어 (Ft. file system) (0) | 2022.09.01 |