pulse.huny.dev
HunyDev
Cross-Compiling for AWS AL2023 ARM64 Using Zig

Cross-Compiling for AWS AL2023 ARM64 Using Zig

ARM64(특히 AWS Lambda/AL2023)용 바이너리를 Zig 크로스컴파일로 빌드하면, gcc/musl 불일치와 런타임 의존성 꼬임을 피하고 완전 재현 가능한 결과물을 얻을 수 있다.

Hun Jang
Hun Jang Nov 27, 2025

Zig와 AL2023으로 ARM64 크로스컴파일 정리하기

ARM64(특히 AWS Lambda/AL2023)용 바이너리를 Zig 크로스컴파일로 빌드하면, gcc/musl 불일치와 런타임 의존성 꼬임을 피하고 완전 재현 가능한 결과물을 얻을 수 있다. 아래 레시피만 따르면 ad‑hoc 툴체인 없이도 예측 가능해진다.

왜 Zig인가?

  • 올인원 크로스툴체인: 별도 크로스 gcc 설치 불필요.
  • 고정 sysroot 사용: AL2023 sysroot로 링크 대상이 일정 → “빌드됨=동일 동작”.
  • 정적/부분정적 링크 쉬움: Lambda 배포 시 glibc/musl 지옥 탈출.

기본 개념 정리

  • AL2023: Amazon Linux 2023. Lambda의 런타임 기반(arm64/AMD64).
  • sysroot: 빌드시 참조할 표준 라이브러리/헤더 세트. “대상 리눅스의 파일시스템 축약판”.
  • triple: aarch64-linux-musl 또는 aarch64-linux-gnu 같은 타깃 표기.

설치

AL2023 sysroot 준비 (권장: 도커로 추출)

  • musl 타깃을 원하면 컨테이너 내에 musl 패키지를 설치해 동일하게 추출.
  • 결과적으로 sysroots/al2023-aarch64include/, lib64/가 존재.

C/C++ 프로젝트 빌드 예시

1) 단일 파일

  • gnu는 glibc, musl은 musl. Lambda는 둘 다 가능하지만 musl 정적 링크가 배포 편함.
  • 너무 공격적 정적 링크가 필요 없다면 static 빼고 진행.

2) Makefile 스니펫

3) C++ (libstdc++ 의존 최소화 권장)

Lambda 배포 팁

  • 바이너리 검사: file out/app_arm64ELF 64-bit LSB pie executable, ARM aarch64.
  • 런타임 의존성 확인: ldd가 정적으로 뜨면 OK. 동적이면 libstdc++.so/libgcc_s.so 누락 주의.
  • 레이어 구성: bootstrap(or app)만 두고 환경 깨끗하게.

흔한 문제 & 해결

  • AL2023 GLIBC 버전 미스매치
    • → 빌드 시 꼭 AL2023에서 뽑은 sysroot 사용.

  • libz, OpenSSL 등 네이티브 라이브러리
    • → 해당 dev 패키지를 컨테이너에서 설치 후 sysroot로 같이 추출.

  • C++ ABI 차이
    • → 가능하면 -static -static-libstdc++ -static-libgcc로 봉인, 아니면 동일 sysroot의 libstdc++.so를 포함.

  • 성능 플래그
    • -O3 -ffast-math(필요 시), OpenMP는 musl 정적 링크 시 주의.

Docker 기반 완전 재현 빌드 예시

언제 musl, 언제 glibc?

  • musl: 단일 정적 바이너리 선호, 이식성/크기/배포 단순화가 목표일 때.
  • glibc: 특정 glibc 기능/호환성이 필요하거나, 동적 로딩·지역화 등 라이브러리 생태계 의존 시.

체크리스트 (요약)

AL2023 컨테이너에서 dev/static 패키지 설치 후 sysroot 추출

zig cc -target aarch64-linux-(musl|gnu) --sysroot ...로 빌드

정적 링크 선호 시 static -static-libstdc++ -static-libgcc

file/ldd로 산출물 확인, Lambda 핸들러로 교체/압축 배포

 

You might also like

BlogPro logo
Made with BlogPro

Tags