##### gcc 

: GNU Compiler CollectionGNU의 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
Btrfs/트리  (0) 2015.08.13

+ Recent posts