Computer >> Hướng Dẫn Máy Tính >  >> Xử Lý Sự Cố >> Linux

Khắc Phục Lỗi "Cannot Execute Binary File: Exec Format Error" Trên Ubuntu

Lỗi bash: ./ten_chuong_trinh: cannot execute binary file: Exec format error xuất hiện khi chạy file binary tải từ Internet (không phải từ repo apt). Nguyên nhân: binary được compile cho kiến trúc CPU khác với kernel hiện tại.

Phương Pháp 1: Xác Định Kiến Trúc CPU Bằng arch

arch

Kết quả phổ biến:

  • i686 — 32-bit (x86). Không chạy được binary x86_64 (64-bit).
  • x86_64 hoặc amd64 — 64-bit. Chạy được cả 32-bit và 64-bit.

Lưu ý: amd64 là tên Linux cho x86_64 (dù CPU Intel). i686 là tên chung cho 32-bit x86.

Xem chi tiết CPU: cat /proc/cpuinfo hoặc more /proc/cpuinfo (nhấn F11 rộng terminal nếu cần).

Kiến trúc khác ít gặp: PowerPC (Mac cũ), ARM (Raspberry Pi, mobile), MIPS, SPARC, Alpha... Ubuntu hỗ trợ một số qua repo chính thức, nhưng binary tải ngoài Internet thường chỉ có x86/x86_64/ARM.

Phương Pháp 2: Kiểm Tra File Bằng file

file ten_chuong_trinh

Kết quả:

  • ELF 64-bit LSB executable, x86-64 → binary 64-bit.
  • ELF 32-bit LSB executable, Intel 80386 → binary 32-bit.

So sánh với output arch:

Trường Hợp Đặc Biệt: Binary "Rác" (Junk Characters)

Chạy binary → terminal in ra ký tự lạ (hình thoi, hộp vuông có số = tofu — Unicode không hiển thị được).

Nguyên nhân: opcode CPU quá lạ, kernel không hiểu. Không phải lỗi font, không phải malware.

Giải pháp: Tải bản compile cho đúng kiến trúc của bạn.

Cách Khắc Phục Chung

  1. Ưu tiên cài từ repo chính thức: sudo apt-get install ten_goi — apt tự chọn đúng kiến trúc.
  2. Nếu tải từ distro khác (Arch, Fedora...): chọn gói đúng kiến trúc (x86_64 vs i686 vs armhf vs aarch64...).
  3. Ví dụ Arch gvim: có gói x86_64 và i686 riêng biệt.
  4. Nếu dùng Raspberry Pi / Ubuntu MATE ARM → cần binary ARM (armhf/aarch64), không phải x86.

Tóm Tắt

  1. Chạy arch → biết CPU 32-bit (i686) hay 64-bit (x86_64/amd64).
  2. Chạy file ten_binary → biết binary 32-bit hay 64-bit.
  3. Khớp không? → Tải binary đúng kiến trúc, hoặc cài từ repo apt.
  4. Binary lạ (tofu) → compile target khác hẳn → bỏ qua.
CPU (arch)Binary 32-bitBinary 64-bit
i686 (32-bit)✅ Chạy được❌ Không chạy được
x86_64/amd64 (64-bit)✅ Chạy được✅ Chạy được