[Unix Introduction] 5-1. Compile C programs using gcc

전민수·2023년 4월 18일
0

Unix Introduction

목록 보기
6/7

1. gcc : standard for GNU C/C++ Compiler

  • preprocessing / compilation / assembly / linking

2. Source files Suffixes(확장자)

  • .cpp or .c or .cc : implementation file
  • .h : interface(header) file

3. C workflow

  1. Editor(Vi etc)로 Source files 생성 (.c .h)
  2. Source files을 compile + assemble -> Object files 생성 (.o)
  3. Object files, Statically-linked Libraries Link -> Executable file 생성
  4. Executable file을 load

Compile and Assemble

  1. compile
  • 자연어 -> 어셈블리어
  • source files -> assembly files
  • *.c *.h -> *.s
  1. assemle
  • 어셈블리어 -> 기계어 번역
  • assembly files -> object files
  • *.c -> *.o

여러 object files과 statically-linked libraries 합병 -> 실행가능한 파일 생성

Building

  • Compile and Assemble + Link

Libraries

  • Static Libraries _ 정적 라이브러리
    • source code를 compile, assemble하면서 생성된다.
    • 각각의 Object files을 결합하여 생성.
    • 실행파일에 링크되어 코드를 실행. 이 때, 모든 함수와 데이터가 실행파일에 포함
    • .a suffix file
  • Shared Libraries _ 공유 라이브러리
    • 여러 프로그램에 재사용할 수 있는 코드의 집합
    • 실행파일, static libraries와 별도로 컴파일
    • 실행파일에 링크되지 않음
    • .so suffix file (on Unix)
  • Dynamically loaded libraries _ 동적 라이브러리
    • 프로그램 runtime 중, 동적으로 load되는 라이브러리
    • 실행파일, static libraries와 별도로 컴파일
    • 실행파일에 링크되지 않음

gcc option

옵션설명
-clink하지 않고, compile과 assemble
-o filenameoutput의 이름을 filename으로 하여 빌드.
옵션을 사용하지 않으면 a.out으로 생성됨.
-gobject code에 디버깅을 포함
-O, -O1, -O2코드의 최적화 레벨을 결정
-I(upper i) dirheader file을 찾기 위한 directory를 추가
-L(upper l) dirlibrary file을 찾기 위한 directory를 추가
-l(lower L) filenamefilename을 가지는 Library를 Link
-staticstatic library를 link
-Dname=definitionsource code 외부에서 macro를 정의
-Sassembly code 생성.(*.s)
-Wall부적합한 코드에 대한 warning을 보여줌.
-staticstatic binding : 정적 라이브러리를 사용하여 컴파일

ar : Library(=Archive) 생성,관리 command

object module들을 등록하는 라이브러리 생성하여 관리함.

$ ar [option] archive [member-file]

<options>

  • r: 아카이브 파일에 새로운 파일을 추가. 만약 기존 파일이 존재한다면 대체
  • c: 아카이브 파일을 생성
  • q: 아카이브 파일의 끝에 새로운 파일을 추가
  • d: 아카이브 파일에서 파일을 삭제
  • t: 아카이브 파일 내의 파일 목록을 출력
  • x: 아카이브 파일에서 파일을 추출하여 현재 디렉토리에 저장합니다.
  • m: 기존의 아카이브 파일에서 주어진 파일을 삭제한 후, 다시 추가함으로써 아카이브 파일의 순서를 변경
  • s: 아카이브 파일 내의 모든 오브젝트 파일에 대해 심볼 테이블을 생성합니다.
  • u: 아카이브 파일에서 이미 있는 파일의 경우 수정된 파일만 추가합니다.
  • v: verbose 옵션. 결과 출력.
profile
Learning Mate

0개의 댓글