기록

[GPT가 알려주는] 컴파일, 링크, 실행파일, 바이너리, 이미지 본문

잡동사니/GPT가 알려주는

[GPT가 알려주는] 컴파일, 링크, 실행파일, 바이너리, 이미지

heylo 2025. 11. 13. 09:53

컴파일 하면 object파일 나오고
링크하면 object파일 엮어서 실행파일 나오는 거 맞아?
내가 아는 실행파일은 exe뿐인데 바이너리파일이 의미하는게 뭐야? 이미지

 

응, 기본 흐름 이해한 거 맞아 👍

  1. 컴파일 → 오브젝트 파일(.o / .obj)
    • C 소스: main.c
    • 컴파일러(gcc, clang 등)가 이걸 기계어로 번역 → 오브젝트 파일 생성
    • 이때는 아직 “완성된 프로그램”이 아님
      • 외부 함수(printf, 다른 소스파일의 함수 등`) 들 주소가 확정 안 된 상태
      • 그래서 “반쯤 만든 부품” 같은 느낌
  2. 링크 → 실행 파일(Executable)
    • 여러 개의 오브젝트 파일: main.o, util.o, device.o
      • 라이브러리: libc, libm…
    • 링커가 이걸 엮어서
      • 외부 함수/변수 참조를 전부 진짜 주소로 채워 넣고
      • 실행 시작 지점(main이 아니라 OS 입장에서의 entry point)도 설정해서
    • 최종적으로 실행 가능한 파일을 만든 게 우리가 아는 exe / a.out / 아무 확장자 없는 실행파일이야.
    ➜ 그래서
  3. “컴파일 하면 object파일 나오고
    링크하면 object파일 엮어서 실행파일 나오는 거 맞아?”
    👉 맞아. (중간에 라이브러리도 같이 엮는다고만 추가로 기억해두면 좋아.)

그럼 “실행파일 = exe” 인가?

  • Windows: 보통 실행파일 = .exe, .dll
  • Linux/Android: 확장자 없이 그냥 app, busybox 이런 이름으로 실행 가능
    • 형식은 ELF (Executable and Linkable Format) 이라는 바이너리 포맷
  • 임베디드:
    • firmware.bin, u-boot.bin, ap1_bl3.rom, Image 이런 것들
    • 이것들도 전부 “실행 가능한 바이너리(또는 로더가 읽어서 실행할 코드)”야.

그러니까 “실행 파일”은 꼭 .exe일 필요 없고,
OS/환경에 맞는 실행 가능한 형식의 바이너리 파일이면 전부 실행 파일이라고 보면 돼.


“바이너리 파일”이란 말의 의미

텍스트 파일이 아닌 모든 파일이라고 생각하면 편해:

  • 기계어 코드가 들어 있는 실행 파일 / 오브젝트 파일 / 라이브러리
  • 이미지 파일(.png, .jpg)
  • 엑셀 .xlsx, 한글 .hwp, 동영상 .mp4 …

이런 건 다 사람이 열어보면 글자가 아니라 깨진 문자열로 보이지?
→ 이런 걸 전부 **“바이너리 파일”**이라고 부르는 거야.

근데 프로그래머들끼리 말할 때

  • “이거 바이너리 떠서 보냈다”
  • “커널 바이너리”
    이렇게 말하면 **대부분 “기계어 코드 들어 있는 실행용 파일 / 이미지”**를 의미하는 경우가 많아.
    (문맥상 “코드 결과물”을 말하는 거지, JPG 같은 걸 말하는 건 아님)

그럼 “이미지(image)”는 또 뭐야?

펌웨어 쪽에서 많이 나온 그 이미지는:

  • **“메모리/저장장치에 그대로 올려서 쓰는 덩어리”**라는 의미로 쓰여
    • 부트로더 이미지: u-boot.bin
    • 커널 이미지: Image, zImage
    • 디스크 이미지: SD_Data.fai, *.img

이것들도 결국은 바이너리 파일의 한 종류고,
“특정 레이아웃대로 꾸려진 데이터 덩어리”라서 image라고 부르는 거야.

정리하면:

  • 바이너리(binary):
    • 텍스트가 아닌 모든 파일 (그 중 코드 결과물을 말하는 경우가 많음)
  • 오브젝트 파일(.o):
    • 컴파일 결과물, 아직 완성 전 부품
  • 실행 파일(executable):
    • 여러 오브젝트(+라이브러리)를 링크해서 나온, OS가 바로 실행할 수 있는 바이너리
  • 이미지(image):
    • 플래시에 굽거나 메모리에 그대로 올릴 수 있게 “포맷 맞춰서 묶어둔” 바이너리 덩어리

혹시 ap1_bl3.rom, Image, hypervisor.bin 같은 걸
“대체 얘네는 exe도 아닌데 뭐지…?” 라고 느꼈다면
→ 전부 “해당 환경에서 실행되거나 로드되는 실행용 바이너리/이미지”라고 보면 돼 🧠

헷갈리는 다른 확장자들 있으면 이름 몇 개 던져줘, 하나씩 “정체” 까보자 😆