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
- Editor(Vi etc)로 Source files 생성 (.c .h)
- Source files을 compile + assemble -> Object files 생성 (.o)
- Object files, Statically-linked Libraries Link -> Executable file 생성
- Executable file을 load
Compile and Assemble
- compile
- 자연어 -> 어셈블리어
- source files -> assembly files
- *.c *.h -> *.s
- assemle
- 어셈블리어 -> 기계어 번역
- assembly files -> object files
- *.c -> *.o
link
여러 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
옵션 | 설명 |
---|
-c | link하지 않고, compile과 assemble |
-o filename | output의 이름을 filename으로 하여 빌드. 옵션을 사용하지 않으면 a.out으로 생성됨. |
-g | object code에 디버깅을 포함 |
-O, -O1, -O2 | 코드의 최적화 레벨을 결정 |
-I(upper i) dir | header file을 찾기 위한 directory를 추가 |
-L(upper l) dir | library file을 찾기 위한 directory를 추가 |
-l(lower L) filename | filename을 가지는 Library를 Link |
-static | static library를 link |
-Dname=definition | source code 외부에서 macro를 정의 |
-S | assembly code 생성.(*.s) |
-Wall | 부적합한 코드에 대한 warning을 보여줌. |
-static | static binding : 정적 라이브러리를 사용하여 컴파일 |
ar : Library(=Archive) 생성,관리 command
object module들을 등록하는 라이브러리 생성하여 관리함.
$ ar [option] archive [member-file]
<options>
- r: 아카이브 파일에 새로운 파일을 추가. 만약 기존 파일이 존재한다면 대체
- c: 아카이브 파일을 생성
- q: 아카이브 파일의 끝에 새로운 파일을 추가
- d: 아카이브 파일에서 파일을 삭제
- t: 아카이브 파일 내의 파일 목록을 출력
- x: 아카이브 파일에서 파일을 추출하여 현재 디렉토리에 저장합니다.
- m: 기존의 아카이브 파일에서 주어진 파일을 삭제한 후, 다시 추가함으로써 아카이브 파일의 순서를 변경
- s: 아카이브 파일 내의 모든 오브젝트 파일에 대해 심볼 테이블을 생성합니다.
- u: 아카이브 파일에서 이미 있는 파일의 경우 수정된 파일만 추가합니다.
- v: verbose 옵션. 결과 출력.