기록

[GPT가 알려주는] toolchain 이란? 본문

잡동사니/GPT가 알려주는

[GPT가 알려주는] toolchain 이란?

heylo 2025. 11. 17. 16:31

toolchain(툴체인)은 “코드 → 실행파일”로 만들어 주는 도구 묶음이야.
개발자가 C/Kotlin/Java 같은 언어로 코드를 쓰면, 이걸 보드에서 돌아가는 **바이너리(elf, exe 같은 것)**로 바꿔주는 애들 세트라고 보면 돼.

조금만 풀어서 말하면:


1. 툴체인에 들어있는 것들

보통 한 세트에 이런 애들이 같이 다녀:

  1. 컴파일러(compiler)
    • 예: gcc, clang, arm-linux-gnueabihf-gcc
    • .c, .cpp 같은 소스 코드를 **목적 파일(.o)**로 바꿔줘.
  2. 어셈블러(assembler)
    • 예: as
    • 어셈블리 코드를 기계어로 바꿔주는 도구.
  3. 링커(linker)
    • 예: ld
    • 여러 개의 .o 파일 + 라이브러리들을 하나의 실행 파일로 묶어줘.
    • 예: a.out, app, vmlinux, zImage 이런 거.
  4. 라이브러리들(libs)
    • 예: libc.so, libm.so 같은 기본 C 라이브러리
    • printf, malloc 같은 함수들이 들어 있지.
  5. 헤더 파일들(include)
    • 예: /usr/include/stdio.h
    • 컴파일 시 “이 함수 어떻게 생겼는지” 알려주는 선언들.
  6. (옵션) 디버거, 툴들
    • 예: gdb, objdump, nm, readelf
    • 디버깅하고, 심볼, 섹션 이런 거 보는 도구들.

이걸 통째로 묶어서 툴체인 1세트라고 부르는 거야.


2. 네가 쓰는 종류: Native vs Cross Toolchain

주연이가 하는 건 임베디드 / Android / 커널이라서 특히 크로스 툴체인이 중요해.

1) 네이티브 툴체인 (native toolchain)

  • “내가 지금 쓰는 PC용” 툴체인.
  • 예: 우분투에서 gcc main.c -o main 이렇게 쓰는 거.
  • 빌드도 x86_64, 실행도 x86_64.

2) 크로스 툴체인 (cross toolchain)

  • PC(x86_64)에서 ARM 보드용 바이너리를 만드는 툴체인.
  • 예:
    • aarch64-linux-android-gcc
    • arm-linux-gnueabihf-gcc
  • 빌드: x86_64 (네 개발 PC)
  • 실행: ARM 보드 (TCC8070, STM32 등)

Android, Linux kernel 빌드할 때

CROSS_COMPILE=aarch64-linux-android-

이런 거 쓰잖아?
이 접두사(aarch64-linux-android-)가 바로 툴체인의 이름이야.


3. 실제로 어디서 보냐? (주연이 환경 기준 예시)

예를 들어:

  • Android 소스 안에:
    • prebuilts/clang/host/linux-x86/
    • prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/
  • STM32 / ARM bare-metal:
    • arm-none-eabi-gcc
  • Yocto / Linux 빌드:
    • aarch64-poky-linux-gcc
    • 이런 이름의 gcc, ld, as가 한 세트.

이 디렉터리들 + 바이너리들 전체가 합쳐져서 툴체인이야.


4. 한 줄 요약

  • 툴체인 = 소스코드(C, C++, 등)를 보드에서 돌아가는 실행 파일로 바꿔주는 도구 모음 세트.
  • 컴파일러 + 어셈블러 + 링커 + 라이브러리 + 헤더 + (디버거 등)으로 구성.
  • 네가 지금 쓰는 aarch64-뭐시기-gcc, clang 이런 것들이 다 “툴체인 패키지” 안에 들어있는 친구들.

원하면:

  • repo 안에서 Telechips MHC SDK에 들어있는 툴체인 경로도 같이 찾아서
    “여기서 이거 쓰는 중이야” 하고 짚어줄게.