Skip to content
OnARM.Net

ARM64EC 설명: 사용 시기, 방법, 그리고 모든 사람을 혼란시키는 종속성 규칙

2026년 6월 5일 업데이트

ARM64EC는 Windows on Arm 개발에서 가장 오해받는 부분입니다. openssl, Qt, Ruby, .NET 이슈 스레드에서 “잠깐, ARM64인가요 ARM64EC인가요?”라는 질문으로 나타납니다. 이제 정리해 봅시다.

사람들이 혼동하는 세 가지

  • ARM64 — 순수 네이티브 Arm64. 가장 빠르지만, Arm64 프로세스는 오직 Arm64 바이너리만 로드할 수 있습니다.
  • ARM64EC (“Emulation Compatible”) — Windows 11 ABI로, 네이티브 Arm64EC 코드와 에뮬레이션된 x64 코드가 하나의 프로세스 안에 공존합니다. Arm64EC 부분은 네이티브로 실행되고, x64 부분은 에뮬레이션으로 실행됩니다.
  • ARM64Xx64/Arm64EC 뷰순수 Arm64 뷰를 모두 포함하는 단일 PE 바이너리로, 두 종류의 프로세스가 모두 로드할 수 있습니다. 공유 DLL에 사용됩니다.

ARM64EC의 실제 의미

ARM64EC는 완전 네이티브로 한 번에 전환할 수 없는 앱을 위한 브리지입니다. 일반적으로 x64 플러그인, 코덱, 또는 Arm64 빌드가 없는 라이브러리에 의존하기 때문입니다. 자신의 코드를 ARM64EC로 다시 컴파일하면(네이티브 속도), x64 종속성은 에뮬레이션으로 계속 실행되며 동일한 프로세스 안에서 동작합니다. Windows 11 on Arm 자체가 이를 사용합니다: x64 앱이 호출하는 대부분의 OS 코드는 ARM64EC로 컴파일되어, 에뮬레이트된 앱이 알지 못해도 네이티브 속도의 시스템 호출을 받습니다.

ARM64EC는 Windows 11 SDK가 필요합니다. Windows 10 on Arm에서는 존재하지 않습니다.

모든 사람을 혼란시키는 종속성 규칙

이것은 가장 많이 언급되는 함정으로, Microsoft에서 직접 인용한 내용입니다:

x64 또는 Arm64EC 프로세스는 x64 및 Arm64EC 바이너리를 모두 로드하고 호출할 수 있는 반면, Arm64 프로세스는 Arm64 바이너리만 로드할 수 있습니다.

즉, ARM64EC 프로세스는 x64 ✓ 및 ARM64EC ✓ 만 로드할 수 있고 순수 ARM64는 ✗ 입니다. ARM64EC로 빌드하고 순수 Arm64 종속성을 가져오려고 하면 로드되지 않습니다. 이 때문에 네이티브 Arm64 라이브러리를 EC 빌드에 포함시키는 사람들이 문제를 겪습니다.

점진적 마이그레이션 플레이북

의도된 워크플로는 점진적이며, 앱은 각 단계에서 계속 실행됩니다:

  1. 완전 에뮬레이션된 x64 앱으로 시작합니다.
  2. CPU 집약적인 모듈을 먼저 ARM64EC로 다시 컴파일합니다 — 노력 대비 최대 성능 향상.
  3. 모듈별로 계속 진행합니다.
  4. 선택적으로 모든 종속성에 Arm64 빌드가 생기면 완전 네이티브 Arm64로 마무리합니다.

ARM64X와 순수 포워더 트릭

x64/EC와 순수 Arm64 프로세스가 모두 로드해야 하는 DLL을 제공한다면, ARM64X로 빌드하세요 — 하나의 파일, 두 개의 뷰입니다. 깔끔한 패턴은 순수 포워더입니다: 로더를 올바른 아키텍처별 실제 DLL로 리디렉션하는 작은 코드 없는 ARM64X DLL입니다.

빌드한 것이 무엇인지 확인하는 방법

  • 최종 바이너리에서 link /dump /headers를 실행하면 ARM64EC 콘텐츠에 대해 8664 machine (x64) (ARM64X) 가 표시됩니다. (중간 OBJ/LIB는 내부 MSVC 식별자인 A641 (ARM64EC)를 보여줍니다 — 최종 PE 유형이 아닙니다.)
  • 작업 관리자에서 ARM64EC 앱은 “ARM64 (x64 호환)” 으로 나타납니다 — 아키텍처 열 읽는 방법을 참조하세요.

ARM64EC vs 완전 네이티브 전환

ARM64EC는 수단이지 목적지가 아닙니다. 모든 종속성에 Arm64 빌드가 있다면 순수 Arm64가 더 빠르고 단순합니다 — 프로세스당 에뮬레이션이 없고 ABI 혼합도 없습니다. 순수 경로를 막는 x64 전용 종속성이 있을 때, 그리고 그럴 때만 ARM64EC를 사용하세요. 전체 이식 로드맵에서 시작하여 종속성 감사가 현재 어떤 길에 있는지 알려줄 것입니다.

← 전체 가이드