bash: ./program: tidak bisa execute file biner: Exec kesalahan format

I'm mencoba untuk menjalankan sebuah program, tetapi kesalahan terjadi seperti ini:

bash: ./program: cannot execute binary file: Exec format error

Hasil dari file program adalah:

program: ELF-32-bit LSB executable, ARM, EABI4 version 1 (SYSV), dynamically linked(uses share libs), for GNU/LINUX 2.6.16, not stripped

Bagaimana saya bisa memperbaiki kesalahan ini?

I'm menggunakan Ubuntu 14.04.2 (amd64) dengan VMware. Saya juga mencoba dengan Ubuntu i386, tapi hasilnya tetap sama.

Mengomentari pertanyaan (1)

Anda're berusaha untuk menjalankan eksekusi dikompilasi untuk arsitektur ARM pada x86-64 arsitektur, yang jauh seperti meminta prosesor yang hanya berbicara bahasa inggris untuk mengambil arah di Cina.

Jika anda perlu untuk menjalankan executable anda memiliki dua pilihan:

  1. Mendapatkan x86-64 versi executable (dengan rata-rata; jika anda're mampu untuk mendapatkan x86-64 versi executable tetapi anda're bisa mendapatkan source code, anda dapat mencoba untuk mengkompilasi ulang pada mesin virtual);

  2. Menginstal Ubuntu Server untuk ARM di tempat Ubuntu 14.04.2 (amd64). Hal ini membutuhkan baik fisik mesin berjalan pada arsitektur ARM atau perangkat lunak virtualisasi yang dapat meniru itu.

Komentar (0)

Hal ini juga dapat terjadi jika anda mencoba untuk menjalankan sebuah x86-64 yang dapat dijalankan pada platform 32-bit.

Dalam satu contoh, saya download Visual Studio Kode dan mencoba untuk menjalankan saya instalasi Ubuntu, tapi saya tidak't menyadari bahwa saya telah terinstal 32-bit Ubuntu di VM ini. Aku punya kesalahan ini, tapi setelah men-download versi 32-bit, berlari tanpa masalah.

Komentar (0)

Hal ini sering mungkin untuk menjalankan sebuah LENGAN image eksekusi pada sistem amd64 jika anda menginstal binfmt-dukungan , qemu , dan qemu-pengguna-statis paket:

sudo apt install binfmt-support qemu qemu-user-static

qemu kemudian akan melakukan syscall emulasi ketika anda menjalankan eksekusi. Ini bekerja untuk sebagian besar LENGAN binari tapi ada beberapa yang mungkin tidak berjalan dengan benar.

Komentar (1)

Kesalahan tersebut dapat terjadi jika semua hal berikut adalah benar:

  • Eksekusi bukanlah sebuah file tetapi link
  • Anda jalankan berjalan di dalam VM
  • File tersebut terletak di folder bersama
  • Host anda adalah Windows.

Jika anda punya file, let's mengatakan, dalam arsip - coba untuk membongkar itu di dalam VM, di beberapa direktori dalam drive virtual, bukan folder dipetakan ke host anda mesin hard drive, misalnya /myNewDir/

Komentar (1)

Anda harus mengkompilasi file anda menggunakan aplikasi yang sesuai arsitektur CPU (x86 misalnya) dan copy .file exe pada mesin linux anda. Kemudian anda dapat menginstal mono pada mesin linux anda dan ketikkan perintah berikut:

mono myprogram.exe
Komentar (0)

Jika lebih dari satu jawa diinstal pada sistem ini mungkin terjadi dan tidak ditetapkan sebagai default. Di Ubuntu14.04 LTS saya bisa mendapatkannya diselesaikan oleh pelaksana berikut ini dan memilih jawa yang saya butuhkan.

sudo update-alternatives --config java
[sudo] password for user: 
update-alternatives: warning: /etc/alternatives/java has been changed (manually or by a script); switching to manual updates only
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      auto mode
  1            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1069      manual mode

Press enter to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java to provide /usr/bin/java (java) in manual mode

Saya memilih 2 dan set openjdk-8 sebagai default. Yang tidak menunjukkan Exec format error.

Komentar (0)

Hal ini juga dapat terjadi jika biner menggunakan libc implementasi yang tidak libc, seperti musl. Hari ini masalah khusus ini adalah yang paling mungkin dihadapi ketika mencoba untuk menjalankan biner dengan libc dalam wadah Docker dengan gambar yang berbasis di alpine. Tidak ada yang dapat dilakukan untuk biner itu sendiri untuk mendukung lingkungan, karena libc pelaksanaan harus selalu dihubungkan statis, yaitu dibangun langsung ke biner, untuk alasan.

Komentar (0)