1 분 소요

📍 해당 게시글은 사물인터넷을 위한 리눅스 기본을 공부하며 정리한 글입니다.


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

태그:

카테고리:

업데이트:

댓글남기기