##### gcc
: GNU Compiler Collection, GNU의 C 컴파일러
(이름이 바뀜, 이전엔 C Compiler 였나..?)
ANSI + POSIX
### 과정 및 옵션
.c -> 컴파일(전처리①, 문법검사/코드최적화② -> .o -> 링크③ -> .exe
① 컴파일과정 - 전처리 옵션
-I : 헤더파일 위치지정 옵션, 표준 디렉토리(/usr/include) 외의 헤더파일의 위치 지정에 사용
-D : Dname, name에 지정된 심볼을 1로 정의, 조건부 컴파일에서 유용하게 사용 됨
② 컴파일과정 - 문법검사/코드최적화
-O : "ON", 컴파일러 최적화 옵션으로 최적화 단계(0~3)를 N으로 지정
③ 링크과정
-L : 라이브러리 파일이 위치하는 경로를 지정
-l + string : 컴파일 시 string으로 입력한 경로의 라이브러리 파일을 추가
* 라이브러리 파일은 ".so" or ".a"
* 라이브러리 파일의 이름은 "lib"로 시작
* 표준 라이브러리는 "/usr/lib"에 존재
ex) 수학 표준 라이브러리 libm.a or libm.so 사용시 "-lm"을 사용해야 함
gcc -o exam_mlib ex exam_mlib.c -lm
④ 기타
g : 실행파일에 표준 디버깅 정보 포함, gdb, DDD 등 디버거 이용 시 사용
wall : gcc가 제공하는 모든 경고를 사용,
시스템과 네트워크 프로그램 및 커널기반의 프로그램 작성 시 해당 옵션을 사용하는 게 좋음
### 라이브러리
1. 정적 라이브러리
소스파일 생성(.c) -> 오브젝트파일 생성(.o) -> 라이브러리파일생성(.a)
vi static.c gcc -c static.c ar rb lib##.a static.o
2. 동적 라이브러리
소스파일 생성(.c) -> 재배치 가능한 오브젝트파일 생성(.o) -> 라이브러리파일생성(.a)
vi shared.c gcc -c -fPIC shared.c ld -shared -o lib##.so shared.o
* 공유 라이브러리 파일 이용 시 메모리에 미리 올라가져 있어야 사용할 수 있으며, 환경변수 설정 후 사용할 수 있게 됨됨
사용자 home의 .bashrc파일에 저장하여 매번 실행해야하는 불편함을 줄일 수 있음
### sysinfo를 활용하여 간단한 프로그램 작성
$ man 2 sysinfo
$ vi test_sysinfo.c
$ gcc -o sysinfo sysinfo.c
$ ./sysinfo
##### gdb
* gdb를 이용하여 파일을 디버깅하려면 실행파일이 디버그모드로 컴파일 되어 있어야 함 (-g 옵션 사용)
명령어 참고.
https://sourceware.org/gdb/current/onlinedocs/gdb/index.html#Top
http://egloos.zum.com/psyoblade/v/2653919
'System > Linux OS ' 카테고리의 다른 글
lsof (0) | 2015.12.24 |
---|---|
strace, ltrace (0) | 2015.12.24 |
man (0) | 2015.12.24 |
리눅스 커널 커밋(commit)하기 - ing (0) | 2015.12.23 |
Linux LVM (0) | 2015.08.12 |