[LINUX] 4.빌드와 컴파일
📍 해당 게시글은 사물인터넷을 위한 리눅스 기본을 공부하며 정리한 글입니다.
1. 빌드(Build)란?
프로그래밍이 시작되고 초기에 어셈블리어라는 것이 있다. 이는 초기 & 저급 언어이기에 빠르게 수행된다는 장점이 있다. 하지만 운영체제가 달리지면 코드를 재수정해야했으며, 이런 니즈로 인해 고급언어가 개발되었다. 그럼에도 고급언어로 작성된 파일을 실행하기 위해서는 기계어 코드로 번역해야하는 과정이 필요하였는데, 이 과정을 컴파일러, 빌드로 보면된다.
[빌드과정] 1) Source code → 2) Obeject code ⇒ 3) 실행파일(기계어코드)
- 빌드과정 : 컴파일 + 링킹
- 1) 에서 2) : 소스코드를 목적 코드로 변경하는 과정이 컴파일이고, 이를 수행하는 것이 컴파일러.
- 2) 에서 3) : 목적코드를 라이브러리와 묶어 실행 파일을 생성하는 것이 링킹, 이를 수행하는 것이 링커.
2. gcc
GCC: GNU Compier Collection
gcc : gnu c compier
- gcc는 c프로그래밍 언어를 위한 컴파일러이다.
gcc -o 파일명 실행파일명
을 하면 실행파일이 생성.gcc 파일명
만 하면 a.out이라는 이름으로 실행파일이 생성.-l 라이브러리명
옵션은 링크할 라이브러리를 지정한다.- -Os : 이 옵션은 컴파일을 최적화하여 용량을 줄이고, 코드량은 크게 증가x
- -O3 : 코드량에 상관없이 빠른 수행만을 위해 최적화
3. GDB
GDB : The GNU Project Debugger
- 이는 GNU 소프트웨어 시스템을 위한 기본 디버거
1) 디버깅 실행
gdb ./실행파일명
- 이후 b print 등으로 브레이크 걸고 r로 실행 c로 진행, k로 종료
2) 명령어
- b : break point지정.
b 함수
b main.c:라인위치
- r : 프로그램 실행(시작)
- (다음으로 이동)
- c : continue 다음 브레이크까지 실행
- n : next 한 줄씩 실행
- s : step 한 줄씩 실행하며, 함수가 있으면 내부로 이동
- l : list 현재 위치의 소스 코드를 표시
- k : 수행 종료
3) 변수
whatis 변수명
: 변수 종류 출력p 변수명
: 변수의 내용 출력
4. 컴파일러와 인터프리터
코드를 번역하는 방법에는 2가지가 있다.
1) 컴파일러(compiler)
: 전체 파일을 스캔하여 한꺼번에 번역
- 단점
- 초기 스캔시간이 오래 걸림
- 기계어 번역과정에서 더 많은 메모리를 사용함.
- 장점
- 한번 실행 파일이 만들어지고 나면 빠르게 실행할 수 있음.
- 실행 전에 오류확인 가능(스캔하는 과정에서 오류를 출력해주기 때문)
- 대표 언어
- C, C++, JAVA
2) 인터프리터(interpreter)
: 프로그램 실행시 한 문장씩 번역.
- 단점
- 한문장씩 번역후 실행 시키기 때문에 실행 시간이 느림.
- 실행 후 오류확인 가능(실행 후 오류를 발견하면 바로 실행을 중지)
- 장점
- 컴파일러와 같이 object code 를 생성하지 않기에 메모리 효율이 좋다.
- 대표 언어
- Python, Perl, Ruby, Javascript
댓글남기기