그라운드 임베디드 유튜브 구독

노트 / C 언어

빌드 과정: 소스가 펌웨어가 되기까지

전처리, 컴파일, 어셈블, 링크를 거쳐 실행 파일이 되는 흐름과 링크 오류를 읽는 방법.

GROUND EMBEDDED · 정리 노트C 언어 12빌드 과정단계입력 → 출력하는 일전처리.c → .iinclude, defi…컴파일.i → .sC를 어셈블리로

빌드 버튼 한 번 뒤에는 네 단계가 있습니다.

단계 입력 → 출력 하는 일
전처리 .c → .i include, define 펼치기
컴파일 .i → .s C를 어셈블리로
어셈블 .s → .o 어셈블리를 기계어 목적 파일로
링크 .o 여러 개 → .elf 함수와 변수 주소 확정, 하나로 합치기

.elf에서 필요한 부분만 뽑으면 MCU에 굽는 .bin이나 .hex가 됩니다.

오류가 어느 단계에서 났는지 보기

  • undeclared identifier: 컴파일 단계. 헤더를 안 넣었거나 오타
  • undefined reference to 'foo': 링크 단계. 선언은 있는데 정의가 담긴 .c 파일이 빌드에 빠짐
  • multiple definition of 'x': 링크 단계. 헤더에 변수를 정의해서 여러 파일에 들어감
  • region FLASH overflowed: 링크 단계. 코드가 Flash 크기를 넘음

맵 파일

링커가 남기는 .map 파일에는 함수와 변수가 어느 주소에 몇 바이트로 놓였는지 나옵니다. Flash나 RAM이 부족할 때 가장 먼저 여는 파일입니다.