Vấn đề
Bạn vừa mới thiết lập một chiếc Mac Apple Silicon mới, di chuyển các tệp tin và mở Terminal để làm việc. Nhưng khi bạn cố gắng chạy một công cụ CLI quen thuộc hoặc một script nội bộ, mọi thứ dừng lại. Thay vì menu trợ giúp hoặc đầu ra của chương trình, bạn thấy một thông báo lỗi ngắn gọn:
zsh: bad CPU type in executable: ./filename
Điều này xảy ra vì máy Mac của bạn đang cố gắng chạy một chương trình được viết bằng ngôn ngữ mà nó không hiểu một cách tự nhiên. Trong khi các chip M1, M2 và M3 sử dụng kiến trúc ARM64, nhiều công cụ cũ—như các phiên bản cũ của Hugo, Terraform hoặc các binary Go tùy chỉnh—được biên dịch cho kiến trúc x86_64 của Intel.
Xác định nguyên nhân gốc rễ
Bộ vi xử lý Apple Silicon xử lý các chỉ thị khác với chip Intel. Nếu không có trình thông dịch, máy Mac của bạn sẽ nhìn vào một tệp binary dựa trên Intel và thấy những ký tự vô nghĩa. Lỗi này là cách kernel thông báo rằng nó không nhận diện được tập lệnh của tệp mà bạn đang cố thực thi.
Bước 1: Kiểm tra tệp Binary
Xác minh kiến trúc của tệp gây lỗi bằng lệnh file. Đây là một tiện ích tích hợp sẵn giúp tiết lộ chính xác tệp đó là gì. Chạy lệnh này trong terminal của bạn:
file ./filename
Nếu đầu ra chứa Mach-O 64-bit executable x86_64, bạn đã tìm thấy vấn đề. Máy Mac của bạn đang cố gắng chạy một tệp chỉ dành cho Intel mà không có lớp dịch cần thiết.
Giải pháp 1: Cài đặt Rosetta 2 (Cách khắc phục nhanh)
Apple cung cấp một lớp dịch gọi là Rosetta 2. Nó nằm giữa phần mềm và phần cứng, dịch các chỉ thị Intel sang chỉ thị ARM ngay lập tức. Nó hoạt động cực kỳ hiệu quả, thường chạy các ứng dụng ở mức 70-80% tốc độ gốc.
Để cài đặt, hãy chạy lệnh này trong Terminal của bạn:
softwareupdate --install-rosetta --agree-to-license
Bản tải xuống có dung lượng nhỏ (khoảng 400MB) và mất chưa đầy một phút. Sau khi hoàn tất, hãy thử chạy lại lệnh của bạn. Nó sẽ hoạt động ngay lập tức mà không cần cấu hình thêm.
Giải pháp 2: Chuyển sang các Binary ARM64 gốc
Rosetta là một cầu nối tuyệt vời, nhưng phần mềm chạy gốc luôn nhanh hơn và tiết kiệm pin hơn. Hầu hết các công cụ phát triển hiện đại hiện nay đều cung cấp phiên bản dành riêng cho Apple Silicon. Chuyển sang các binary gốc là chiến lược dài hạn tốt nhất.
- Kiểm tra nguồn: Truy cập trang "Releases" trên GitHub của dự án. Tìm các bản tải xuống có chứa arm64, aarch64, hoặc Apple Silicon trong tên tệp.
- Cập nhật Homebrew: Nếu bạn di chuyển từ một máy Mac chạy chip Intel, bản cài đặt Homebrew của bạn có thể nằm sai vị trí. Homebrew gốc nằm ở
/opt/homebrew, trong khi phiên bản Intel nằm ở/usr/local. - Cài đặt lại các công cụ: Sử dụng
brew listđể xác định các gói cũ và cài đặt lại chúng để đảm bảo bạn đang sử dụng phiên bản ARM.
Giải pháp 3: Biên dịch lại từ mã nguồn
Nếu bạn đang làm việc với một script tùy chỉnh hoặc một công cụ nội bộ, bạn chỉ cần biên dịch lại nó trên máy mới. Vì môi trường của bạn là ARM64 gốc, các trình biên dịch tiêu chuẩn như clang, gcc, hoặc trình biên dịch Go sẽ mặc định nhắm mục tiêu vào kiến trúc hiện tại của bạn.
# Ví dụ: Biên dịch lại một công cụ C++
g++ -o my_tool main.cpp
# Xác nhận kiến trúc mới
file my_tool
Đầu ra lúc này sẽ hiển thị Mach-O 64-bit executable arm64.
Giải pháp 4: Dọn dẹp biến môi trường PATH
Đôi khi lỗi vẫn còn vì shell của bạn vẫn đang tìm kiếm các binary Intel cũ ẩn trong /usr/local/bin. Bạn cần yêu cầu máy Mac ưu tiên các phiên bản ARM mới. Hãy mở tệp cấu hình của bạn:
nano ~/.zshrc
Thêm hoặc di chuyển đường dẫn Homebrew lên đầu biến $PATH của bạn:
export PATH="/opt/homebrew/bin:$PATH"
Lưu tệp (Ctrl+O, Enter) và thoát (Ctrl+X). Làm mới phiên làm việc bằng cách chạy source ~/.zshrc.
Xác minh kết quả
Để kiểm tra kết quả, hãy mở Activity Monitor và chuyển đến tab CPU. Tìm cột Kind. Các chương trình chạy gốc sẽ được gắn nhãn là "Apple", trong khi những chương trình sử dụng Rosetta sẽ được gắn nhãn là "Intel". Nếu công cụ CLI của bạn là bản gốc, nó sẽ hiển thị là Apple (ARM) khi đang thực thi.
Những điểm chính cần lưu ý
- Kiểm tra trước khi cài đặt: Phần mềm ARM64 gốc tiết kiệm năng lượng hơn đáng kể so với phần mềm Intel được dịch qua Rosetta.
- Rosetta là tùy chọn: macOS không bao gồm Rosetta 2 theo mặc định; bạn chỉ cần nó nếu phụ thuộc vào các công cụ cũ.
- Vệ sinh đường dẫn (Path): Chuyển sang Apple Silicon là thời điểm tuyệt vời để kiểm tra lại tệp
.zshrcvà xóa các đường dẫn được mã hóa cứng tới các thư mục Intel cũ.

